Nope, -std=c++17 didn’t help either. On Thu, Feb 4, 2021 at 1:33 PM David Brown <david.br...@hesbynett.no> wrote:
> > > On 04/02/2021 22:21, Andreas Schwab wrote: > > On Feb 04 2021, David Brown wrote: > > > >> For the built-in comma operator, you get guaranteed order of evaluation > >> (or more precisely, guaranteed order of visible side-effects). But for > >> a user-defined comma operator, you do not - until C++17, which has > >> guaranteed evaluation ordering in some circumstances. > > > > But not the evaluation order of function arguments. See > > <https://en.cppreference.com/w/cpp/language/eval_order> Sequenced-before > > rules, rule 15. > > Correct. > > > > >> Try your test again with "-std=c++17" or "-std=g++17" - if the order is > >> still reversed, it's a gcc bug (AFAICS). > > > > I don't think so. > > > > Unless I am missing something, in the OP's program it is a user-defined > comma operator that is called. There is only one argument to the > "test_comma_operator" function, the result of that user-defined comma > operator. So rule 15 above does not apply - rule 16 applies. > > At least that is /my/ reading of the cppreference page and the OP's > program. > > David > >