From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id C0FF13858035; Sun, 17 Oct 2021 22:09:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C0FF13858035 From: "rudick at gmail dot com" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/102804] New: template matching fails w/ false ambiguity on ternary expressions with enums Date: Sun, 17 Oct 2021 22:09:29 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Version: 11.2.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: rudick at gmail dot com X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Oct 2021 22:09:29 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D102804 Bug ID: 102804 Summary: template matching fails w/ false ambiguity on ternary expressions with enums Product: gcc Version: 11.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rudick at gmail dot com Target Milestone: --- E.g. w/ -std=3Dc++11 #include int main() { enum: unsigned int32_t { FOO, BAR } foobar =3D FOO; std::cout << ((time(nullptr) % 2) ? foobar : 13) << std::endl; } The initial error is: error: ambiguous overload for =E2=80=98operator<<=E2=80=99 (operand types a= re =E2=80=98std::ostream=E2=80=99 {aka =E2=80=98std::basic_ostream=E2=80=99} and =E2=80=98unsigned int= =E2=80=99) in gcc9.2 & gcc 11.2.0 gcc7 happily compiles the code. with -Wextra, all 3 versions warn: error: enumerated and non-enumerated type in conditional expression Version: 11.2.0 system: CentOS Linux 7.7.1908 on Intel Xeon command: g++ -Wall -Wextra -std=3Dc++11 20211017-bug.cpp=