Определение наличия функции в базовом классе.
От: AndrewJD США  
Дата: 18.03.16 18:32
Оценка:
Привет Всем,

Помогите разобраться, почему не работает определение наличия функции в базовом классе.
Использую классический способ:
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. Задачу регил другим способом и интерисует что именно не так с кодом выше.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.