Я смутно помню, как где-то читал, что это поведение undefined, если несколько операндов в составном выражении изменяют один и тот же объект.
Я считаю, что пример этого UB показан в коде ниже, но я скомпилирован на g++, clang++ и visual studio, и все они распечатывают одни и те же значения и не могут создавать непредсказуемые значения в разных компиляторах.
#include <iostream>
int a( int& lhs ) { lhs -= 4; return lhs; }
int b( int& lhs ) { lhs *= 7; return lhs; }
int c( int& lhs ) { lhs += 1; return lhs; }
int d( int& lhs ) { lhs += 2; return lhs; }
int e( int& lhs ) { lhs *= 3; return lhs; }
int main( int argc, char **argv )
{
int i = 100;
int j = ( b( i ) + c( i ) ) * e( i ) / a( i ) * d( i );
std::cout << i << ", " << j << std::endl;
return 0;
}
Это поведение undefined или я каким-то образом вызвал описание предполагаемого UB, который на самом деле не является undefined?
Буду признателен, если кто-нибудь сможет опубликовать пример этого UB и, возможно, даже укажет мне, где в стандарте С++ он говорит, что это UB.