This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/47959] New: [C++0x] brace-or-equal-initializer not allowed for static data member of const literal type
- From: "redi at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 2 Mar 2011 17:34:21 +0000
- Subject: [Bug c++/47959] New: [C++0x] brace-or-equal-initializer not allowed for static data member of const literal type
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47959
Summary: [C++0x] brace-or-equal-initializer not allowed for
static data member of const literal type
Product: gcc
Version: 4.6.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: redi@gcc.gnu.org
struct Lit { constexpr Lit() {} };
struct L
{
static const Lit l = Lit();
} ;
init.cc:5:30: error: 'constexpr' needed for in-class initialization of static
data member 'l' of non-integral type
I think the diagnostic is wrong.
[class.static.data] p3 says
If a static data member is of const literal type, its declaration in
the class definition can specify a brace-or-equal-initializer in which
every initializer-clause that is an assignment-expression is a constant
expression.
Lit is a literal type, L::l is of const literal type, the initializer is a
constant expression, so the example should be accepted.