Với g ++ 5.4, đâyTại sao khấu trừ đối số mẫu không thành công cho hàm thành viên?
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);
}
thất bại do "loại mâu thuẫn suy luận cho thông số‘T’(‘B’và‘D’)". Tại sao T không được suy ra như D, là một trận đấu chính xác?
Có thể vì không có 'D :: f'? Chỉ tồn tại 'B :: f', vì vậy loại' & D :: f' là 'B :: *'? – geza