¿Bitwise-o garantiza un pedido de evaluación?
Di que tengo este código:
unsigned int func1();
unsigned int func2();
unsigned int func3();
unsigned int x = func1() | func2() | func3();
¿C ++ garantiza que primero se llamará a func1 (), luego a func2 () y luego a func3 ()?
O se le permite al compilador llamar a las funciones en el orden que considere?
Además, ¿se le permite al compilador implementar una optimización de cortocircuito aquí si así lo desea? (por ejemplo, si func1 () devolvió ~ 0, ¿podría el compilador decidir no molestarse en llamar a func2 () o func3 (), porque sabe que sus valores de retorno no pueden afectar el valor asignado a x?)