【发布时间】:2019-02-20 10:36:19
【问题描述】:
这段代码 sn-p 在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 之一以避免重载,它将编译。
【问题讨论】:
-
递归函数模板重载解析?祝所有深入研究的人好运……
标签: c++ templates language-lawyer overload-resolution