Re: Определение наличия функции в базовом классе.
От: andyp  
Дата: 20.03.16 00:13
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AJD>Привет Всем,


AJD>Помогите разобраться, почему не работает определение наличия функции в базовом классе.


Компилятор не может инстанциировать signature_check, потому что &Derived::foo имеет тип void (Base::*) (int). Это можно увидеть по сообщениям компилятора если закомментируешь
template <typename C> static no test(...);


В обычном (нешаблонном) коде этого не видно, потому что в стандарте определены правила конвертации указателей на функции-члены (Pointer to member conversions) и в твоем случае указатель без проблем конвертируется, т.е.

void (Derived::*p) (int) = &Derived::foo;


вполне себе скомпилируется, также как впрочем и

void (Derived::*p) (int) = &Base::foo;
void (Base::*p) (int) = &Derived::foo;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.