Is this legal C++?
struct foo
{
int a[100];
int b[sizeof(a) / sizeof(a[0])];
};
GCC 4.6 accepts it, but MSVC 2012 doesn't. It seems like it should be fine to me, but a bit of Googling didn't help and I don't know where to look in the standard.
MSVC 2012 gives the following output:
error C2327: 'foo::a' : is not a type name, static, or enumerator
error C2065: 'a' : undeclared identifier
error C2070: ''unknown-type'': illegal sizeof operand
warning C4200: nonstandard extension used : zero-sized array in struct/union
This was illegal in C++03 because these members are nonstatic datamembers.
Starting from C++11 this is legal since in an unevaluated operand you can use nonstatic datamembers without having a corresponding object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With