Règle 16) Every overloaded operator obeys the sequencing rules of the built-in operator it overloads when called using operator notation
Et 20) In every simple assignment expression E1=E2 and every compound assignment expression E1@=E2, every value computation and side-effect of E2 is sequenced before every value computation and side effect of E1
m.size() est évalué en premier, puis m[1]. Le bon résultat est celui retourné par gcc 9.
[^] # Re: Comportement indéfini
Posté par Patrick Nicolas . En réponse au journal C++, surcharge d'opérateur, ordre d'évaluation. Évalué à 6.
Indéfini avant C++17.
À partir de C++17 c'est défini d'après https://en.cppreference.com/w/cpp/language/eval_order
Règle 16) Every overloaded operator obeys the sequencing rules of the built-in operator it overloads when called using operator notation
Et 20) In every simple assignment expression E1=E2 and every compound assignment expression E1@=E2, every value computation and side-effect of E2 is sequenced before every value computation and side effect of E1
m.size()est évalué en premier, puism[1]. Le bon résultat est celui retourné par gcc 9.