• [^] # Re: Comportement indéfini

    Posté par . 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, puis m[1]. Le bon résultat est celui retourné par gcc 9.