http://gcc.gnu.org/bugzilla/show_bug.cgi?id=61122
--- Comment #3 from Jonathan Wakely redi at gcc dot gnu.org ---
No. At file or function scope the initializer is definitely used, and can
provide the array bound. On a non-static data member it is not used until the
object is constructed (and then might be ignored if there's a mem-initializer
for the member) and that's too late, the array bound for non-static data
members must be known at class definition time to know sizeof(s).
That's my understanding, and I've just checked clang agrees, with a better
diagnostic:
in.cc:10:26: error: array bound cannot be deduced from an in-class initializer
std::vector int b1[] { { } };
^
in.cc:11:26: error: array bound cannot be deduced from an in-class initializer
std::vector int b2[] { { 1, 2, 3 } };
^
in.cc:12:26: error: array bound cannot be deduced from an in-class initializer
std::vector int b3[] { std::vector int () };
^
in.cc:13:26: error: array bound cannot be deduced from an in-class initializer
std::vector int b4[] { std::vector int (1) };
^
4 errors generated.