С g++ 5.4 этот
struct B {
void f() {}
};
struct D : public B {
void g() {}
};
template <class T>
void foo(void (T::*)(), void (T::*)())
{}
int main()
{
foo(&D::f, &D::g);
}
не удается выполнить "выведенные конфликтующие типы для параметра" T ( "B" и "D" ) ". Почему T не выводится как D, являясь точным соответствием?