https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96227
Bug ID: 96227 Summary: Comma operation sequencing issue Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: matt at godbolt dot org Target Milestone: --- Filing on behalf of @lunasorcery (on twitter): The following code: ``` #include <cstdio> struct S { S(char const* message) { puts(message); } }; void operator,(S,S){} int main() { S("first"), S("second"); operator,(S("FIRST"), S("SECOND")); } ``` Should produce the output: first second FIRST SECOND But instead produces: second first SECOND FIRST quotations from N4861: [expr.comma] "The left expression is sequenced before the right expression." [over.match.oper] "If either operand has a type that is a class or an enumeration, a user-defined operator function might be declared that implements this operator [...] However, the operands are sequenced in the order prescribed for the built-in operator." [expr.call] "If an operator function is invoked using operator notation, argument evaluation is sequenced as specified for the built-in operator; see 12.4.1.2." https://gcc.godbolt.org/z/fdTG8q