Мне нужно проверить и посмотреть, есть ли у данного типа переменная-член. Однако когда задан тип, который не является классом или структурой, я получаю ошибку компилятора.
struct Vector {
int x;
};
template <typename Type>
class has_member_x
{
class yes { char m;};
class no { yes m[2];};
struct BaseMixin
{
int x;
};
struct Base : public Type, public BaseMixin {};
template <typename T, T t> class Helper{};
template <typename U>
static no deduce(U*, Helper<void (BaseMixin::*)(), &U::x>* = 0);
static yes deduce(...);
public:
static const bool result = sizeof(yes) == sizeof(deduce((Base*)(0)));
};
int main() {
BOOST_STATIC_ASSERT(has_member_x<int>::result);
BOOST_STATIC_ASSERT(has_member_x<Vector>::result);
}
Когда я пытаюсь скомпилировать это, происходит сбой со следующей ошибкой.
ошибка: базовый тип "int" не может быть структурой или типом класса
Есть ли способ сделать это в c ++ или c ++ 0x?