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&nbsp;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?