From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4999 invoked by alias); 28 Jun 2012 10:36:53 -0000 Received: (qmail 4920 invoked by uid 22791); 28 Jun 2012 10:36:52 -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; Thu, 28 Jun 2012 10:36:30 +0000 From: "redi at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/53788] C++11 decltype sfinae static member function check (4.7.1) Date: Thu, 28 Jun 2012 10:36: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: X-Bugzilla-Severity: normal 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: Status Last reconfirmed Ever Confirmed 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-06/txt/msg01866.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53788 Jonathan Wakely changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-06-28 Ever Confirmed|0 |1 --- Comment #3 from Jonathan Wakely 2012-06-28 10:36:29 UTC --- Here's a C++03 version, which G++ also accepts but Clang and Comeau online reject: struct t { char c; }; struct f { char c[2]; }; template struct Int { }; template struct has_static { template static t check(X*, Int* = 0); static f check(...); static const bool value = sizeof(check((T*)(0))) == sizeof(t); }; struct test { int fun() { return 0; } }; bool b = has_static::value; G++ does reject it for different invalid expressions, e.g. if fun doesn't exist at all, so it does seem to be treating the decltype expression as outside the immediate context during type deduction, but not consistently.