Этот фрагмент кода не компилируется в MSVC , Clang и Gcc , (они выдают другое сообщение об ошибке):
int foo(int a, int b) {
return a + b;
}
template <class Ret, class A, class B>
void foo(Ret (*)(A, B)) {
}
int main() {
foo(foo);
return 0;
}
Разве это не должно компилироваться?Я не могу понять, почему не удается разрешить перегруженную функцию или определить аргументы шаблона.Любая помощь приветствуется, спасибо.
PS: Он компилируется, если шаблон заменен на void foo(int (*)(int, int))
, или если мы переименуем один из foo
, чтобы избежать перегрузки.