Ponteiro para membro: funciona no GCC, mas não no VS2015

Estou tentando implementar um sistema de "propriedade" para converter instâncias C ++ em JSON e vice-versa. Peguei parte do código da resposta de Guillaume Racicot nesta pergunta (Serialização C ++ JSON) e simplificou.

Aqui está como eu procedo. eu tenho umProperty classe:

template <typename Class, typename T>
struct Property {
    constexpr Property(T Class::* member, const char* name) : m_member(member), m_name(name) {}

    T Class::* m_member;
    const char* m_name;
};

m_member aponta para um membro específico deClass

Digamos que eu queira definir propriedades para umUser classe, eu gostaria de poder continuar assim, para poder atribuir aos membros um nome de propriedade:

class User
{
public:
    int age;

    constexpr static auto properties = std::make_tuple(
        Property<User, int>(&User::age, "age")
    );
}

Esse código compila e funciona corretamente no GCC (http://coliru.stacked-crooked.com/a/276ac099068579fd), mas não no Visual Studio 2015 Update 3. Eu recebo esses erros:

main.cpp(19) : error C2327 : 'User::age' : is not a type name, static, or enumerator
main.cpp(19) : error C2065 : 'age' : undeclared identifier
main.cpp(20) : error C2672 : 'std::make_tuple' : no matching overloaded function found
main.cpp(20) : error C2119 : 'properties' : the type for 'auto' cannot be deduced from an empty initializer

Haveria uma solução alternativa para fazê-lo funcionar no Visual Studio 2015 Update 3?

questionAnswers(3)

yourAnswerToTheQuestion