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: unassig...@gcc.gnu.org ReportedBy: r...@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.