Is the following code well-formed?
#include <cstddef>
struct Test
{
int member;
static constexpr const size_t Size1 = sizeof(member);
static constexpr const size_t Size2 = sizeof(decltype(member));
static constexpr const size_t Size3 = sizeof(Test::member);
};
The problem is sizeof(member) used in the definition of the class itself. All Size1, Size2 and Size3 initializers went fine with gcc, clang and newer MSVC. But MSVC 14 isn't happy with Size1 (the other two are ok). It says:
error C2327: 'Test::member': is not a type name, static, or enumerator
which baffles me, because member (whether qualified or not) seems a valid expression in the context of that class.
So, should I take this as a bug in older MSVC, or is such error message justified?
Aucun commentaire:
Enregistrer un commentaire