Bitwise ou garante uma ordem de avaliação?
Dizem que tenho este código:
unsigned int func1();
unsigned int func2();
unsigned int func3();
unsigned int x = func1() | func2() | func3();
C ++ garante que func1 () seja chamado primeiro, depois func2 () e depois func3 ()?
O compilador pode chamar as funções em qualquer ordem que parece
Além disso, o compilador tem permissão para implementar aqui uma otimização de curto-circuito, se quiser? (por exemplo, se func1 () retornou ~ 0, o compilador pode decidir não se incomodar em chamar func2 () ou func3 (), porque sabe que seus valores de retorno não podem afetar o valor atribuído a x?)