From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11271 invoked by alias); 21 Aug 2012 19:52:08 -0000 Received: (qmail 11258 invoked by uid 22791); 21 Aug 2012 19:52:07 -0000 X-SWARE-Spam-Status: No, hits=-4.3 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00,KHOP_THREADED X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 21 Aug 2012 19:51:55 +0000 From: "redi at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/54348] confusing error reported for type mismatch in conditional expression : "error: no match for ternary 'operator?:' in 'false ?" Date: Tue, 21 Aug 2012 19:52:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: c++ X-Bugzilla-Keywords: diagnostic X-Bugzilla-Severity: enhancement X-Bugzilla-Who: redi at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2012-08/txt/msg01499.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54348 --- Comment #2 from Jonathan Wakely 2012-08-21 19:51:53 UTC --- (In reply to comment #0) > Shouldn't g++ be complaining about initializing a string with a list > rather than this cryptic "no match for ternary 'operator?:'" here ? No, not really. The object being initialized by the result of the condition expression is irrelevant, the conditional expression isn't valid whether or not you're using it to initialize another object. In this reduced version it wouldn't make sense to refer to initializing any object with any other: struct A {} a; struct B {} b; void f() { false ? a : b; }