This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug c++/47959] New: [C++0x] brace-or-equal-initializer not allowed for static data member of const literal type


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]