Opened from comment 4 in PR29727. The following valid snipped is rejected with the current mainline
=== template<int> struct A { struct S { int X; }; static S a; }; template<int N> typename A<N>::S A<N>::a = { X : 1 }; void foo() { A<0>::a; } === because 'X' is not found in the designated initializer: [...] pr29727_valid.C:18: error: 'Y' was not declared in this scope pr29727_valid.C:18: error: 'B<0>::S' has no non-static data member named '<declaration error>' We get the same with 4.0.1, 4.2.1 and the 4.3 branch. I don't have any earlier version to check, so I don't know if this is a regression or not. With a non template class, the code is accepted. -- Summary: Problem with designated initializer and template Product: gcc Version: unknown Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: simartin at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37736