Не используйте выражения с побочным эффектом в невычисляемых контекстах

В невычисляемых контекстах (sizeoftypeid, decltypedeclval, noexcept, alignof) выражения анализируются только на уровне типов, но никогда не исполняются - не полагайтесь на их побочные эффекты.

Неправильно:

int n = 42;
int m = sizeof(n++);
std::cout << n << ", " << m << std::endl;

Выражения внутри sizeof и подобных операторов компилятор не выполняет - он смотрит только на их тип, поэтому n так и останется 42. Лучше вынести инкремент/вызов функции наружу, чтобы код вёл себя предсказуемо.

Правильно:

int n = 42;
int m = sizeof(n);
++n;
std::cout << n << ", " << m << std::endl;