http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60698

            Bug ID: 60698
           Summary: non-empty braced-or-equal-initializer of non-static
                    data member T[N]  in class template results in error
                    diagnostic, if T is a class
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: filip.roseen at gmail dot com

Created attachment 32476
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32476&action=edit
testcase.cpp

struct A { };

template<class>
struct B {
  A a[1] = { A () };
};

int main () { B<void> b; }

--------------------------------------------------

The above is a legal construct, but gcc rejects it with the following
diagnostic:

  > testcase.cpp: In constructor ‘constexpr B<void>::B()’:
  > testcase.cpp:4:8: error: invalid initializer for array member ‘A B<void>::a
[1]’
  >   struct B {
  >        ^
  > testcase.cpp: In function ‘int main()’:
  > testcase.cpp:8:24: note: synthesized method ‘constexpr B<void>::B()’ first
required here 
  > int main () { B<void> {}; }


[ Note: Both `clang` and `icc` correctly accepts the snippet provided. ]

Reply via email to