C28753
aviso C28753: dependendo da ordem indefinida de avaliação de parâmetros
O C/C++ permite que o compilador gere código para avaliar os parâmetros reais em qualquer ordem e os compiladores x86 e Arm tendem a selecionar ordens diferentes. O código que depende de uma ordem específica pode se comportar de forma diferente em diferentes plataformas.
Um erro comum é com o uso de ponteiros inteligentes em que o endereço do operador & tem efeitos colaterais, em chamadas como esta:
sp->Foo(&sp);
As chamadas para o operador de acesso de membro –> e o operador& podem acontecer em qualquer ordem. Portanto, efeitos colaterais do operador & podem acontecer antes ou depois do operador –> é chamado. Esse aviso localiza essas chamadas de bug para evitar comportamentos diferentes entre plataformas.
Exemplo
O exemplo de código a seguir gera esse aviso.
sp->Foo(&sp)
O exemplo de código a seguir evita esse aviso.
SmartPtr spTemp;
sp->Foo(&spTemp);
sp = spTemp;