From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com [IPv6:2607:f8b0:4864:20::22d]) by sourceware.org (Postfix) with ESMTPS id 34CA63857823 for ; Thu, 4 Feb 2021 20:08:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 34CA63857823 Received: by mail-oi1-x22d.google.com with SMTP id d20so5003397oiw.10 for ; Thu, 04 Feb 2021 12:08:19 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=ydcifzjV9h/HazJ+bb2zLqygPjt5lH8tCo5wFMNMitg=; b=kbd+q4vDoG0HCpWQiB3Q+AFL85cfcnCwpOJ+JUF/z4nxs8+XRg8SMnGuA928Bblbwb QpFKc6rlTW7djVrnzvW3UL+SKjzlt+nNxVPyKRcncVZYSCNtYvgHxq2dstRFcjLsSvx+ ebEToiff0LYXBlIbixcE/duUlI6fu6CyH1ZTembwJZ34xgAezmAkuxiqcqEx+5yqfjb5 kvZnmPl9lZBxN6DQrN/NTdeNu6HEcrmuNS3/FGBHK2SMqVBzKoQ3TAX1eba7KtaEUX1y gVmKc8xEjHQbJbofVa1JE13+73rntA7TZbnf+dBBiLLbJYaOeGMZfyNC5RdhL2Pdd2Is H4pA== X-Gm-Message-State: AOAM53217JC2/wR3o30xSifU4lYNkNMpLNJDZNcsDSXdmcBjUtrfXVDN 0xWmI4+sHWRplFaV+IvrCuIUunRqS1hrBFaT0I7u4B89eBQ= X-Google-Smtp-Source: ABdhPJy1eAt1OAxa5hTUJ6F4nBkXGCk7GcW49Ia//1KMI3LBwMf6OrAX5KRAGV7jj4Be2ccCX4fGGkHOXBvVnFbW2e8= X-Received: by 2002:aca:5692:: with SMTP id k140mr796916oib.145.1612469298236; Thu, 04 Feb 2021 12:08:18 -0800 (PST) MIME-Version: 1.0 From: AJ D Date: Thu, 4 Feb 2021 12:08:06 -0800 Message-ID: Subject: Comma Operator - Left to Right Associativity To: gcc@gcc.gnu.org X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: gcc@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 04 Feb 2021 20:08:20 -0000 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 struct CBI; struct EC; struct CET; struct CBI { CBI& operator,(const CBI& rhs) { return *const_cast(&rhs); } }; struct EC : CBI { explicit EC(CET* cet) : cet_(cet) {} CET* cet_; }; struct CET { CBI& operator,(const CBI& rhs) const { return *const_cast(&rhs); } operator EC&() const { return *new EC(const_cast(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?