Isn't comma operator suppose to honor left-to-right associativity? When I try it on this test case, it exhibits right-to-left associativity.
#include <iostream> struct CBI; struct EC; struct CET; struct CBI { CBI& operator,(const CBI& rhs) { return *const_cast<CBI*>(&rhs); } }; struct EC : CBI { explicit EC(CET* cet) : cet_(cet) {} CET* cet_; }; struct CET { CBI& operator,(const CBI& rhs) const { return *const_cast<CBI*>(&rhs); } operator EC&() const { return *new EC(const_cast<CET*>(this)); } }; static const CET& hello() { std::cout << "Hello " << std::endl; return *new CET(); } static const CET& world() { std::cout << "World " << std::endl; return *new CET(); } static void test_comma_operator(CBI&) { } int main() { test_comma_operator (( hello(), world() )); } CLANG appears to do it right. us01odcvde08782> clang++ -g test.cpp us01odcvde08782> ./a.out *Hello* World us01odcvde08782> g++ -g test.cpp us01odcvde08782> ./a.out World *Hello* us01odcvde08782> I was using CentOS6.8 with gcc 6.2. However, trying other versions of GCC didn't make any difference. Is this a bug in GCC?