Привет Всем,
Помогите разобраться, почему не работает определение наличия функции в базовом классе.
Использую классический способ:
template <typename T>
class has_foo
{
typedef char yes;
typedef long no;
template <typename U, U> class signature_check;
template <typename C> static yes test(signature_check<void (C::*)(int), &C::foo>*);
template <typename C> static no test(...);
public:
static const bool value = (sizeof(test<T>(0)) == sizeof(yes));
};
struct Base
{
void foo(int);
};
struct Derived : public Base
{
};
int main() {
cout << "Base: " << has_foo<Base>::value << endl;
cout << "Derived: " << has_foo<Derived>::value << endl;
}
Выводит
Base: 1
Derived: 0
Полный пример на
ideone.com
Какой пункт стандарта мешает этому коду работать?
P.S. Задачу регил другим способом и интерисует что именно не так с кодом выше.