Согласно документации , __traits (hasMember, ...) должен работать с любым типом, имеющим члены, но я не могу получить код, который использует его с классами для компиляции. Обратите внимание на следующий фрагмент:
struct A {
int foo;
}
static assert(__traits(hasMember, A, "foo"));
Это компилируется (хотя это не будет ссылаться, потому что нет главного). Но если я изменю "struct A" на "class A", статическое утверждение срабатывает, и код не будет компилироваться. Я ничего не могу найти в баг-трекере, и кажется, что это большая буква E на глазке. Я что-то не так делаю?
- Изменить:
По примеру getMember, похоже, что hasMember работает с классом, только если foo статический. Кроме того, я могу создать экземпляр A и проверить экземпляр на наличие нестатического foo. Проблема в том, что мне нужно проверить наличие нестатического члена класса во время компиляции.