https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91974
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I dont think this is well defined. A call and its arguments are not sequence points. Yes there is a sequence point between the assignment and 0 but nothing else. Note c++17 does change the rules and I have not read them yet.