C28753
предупреждение C28753: использование неопределенного порядка оценки параметров
C/C++ позволяет компилятору создавать код для оценки фактических параметров в любом порядке, а компиляторы x86 и Arm, как правило, выбирают разные заказы. Код, основанный на определенном порядке, может вести себя по-разному на разных платформах.
Распространенная ошибка заключается в использовании смарт-указателей, где адрес оператора & имеет побочные эффекты, в таких вызовах:
sp->Foo(&sp);
Вызовы оператора доступа к членам —> и оператор & могут выполняться в любом порядке. Таким образом, побочные эффекты от оператора & могут произойти до или после оператора — вызывается>. Это предупреждение находит эти вызовы ошибок, чтобы предотвратить различные действия между платформами.
Пример
Следующий пример кода создает это предупреждение.
sp->Foo(&sp)
Следующий пример кода избегает этого предупреждения.
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;