Указатель на участника: работает в GCC, но не в VS2015
Я пытаюсь реализовать систему «свойств» для преобразования экземпляров C ++ в JSON и наоборот. Я взял часть кода из ответа Гийома Рашико на этот вопрос (C ++ JSON-сериализация) и упростил это.
Вот как я продолжаю. у меня естьProperty
учебный класс:
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 указывает на конкретного членаClass
Допустим, я хочу определить свойства дляUser
класс, я хотел бы иметь возможность действовать следующим образом, чтобы иметь возможность назначать членам имя свойства:
class User
{
public:
int age;
constexpr static auto properties = std::make_tuple(
Property<User, int>(&User::age, "age")
);
}
Этот код компилируется и работает правильно в GCC (http://coliru.stacked-crooked.com/a/276ac099068579fd), но не в Visual Studio 2015 Update 3. Я получаю эти ошибки:
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
Был бы обходной путь, чтобы заставить это работать в Обновлении 3 Visual Studio 2015?