![](/img/trans.png)
[英]call of overloaded *** <unresolved overloaded function type>)' is ambiguous
[英]Unresolved overloaded function type in gcc
我正在尝试将函数模板作为参数传递给另一个函数,如下例所示。
#include <iostream>
template <typename T>
decltype(auto) foo(T t)
{
return t;
}
template <typename Fn, typename T>
decltype(auto) bar(Fn fn, T t)
{
return fn(t);
}
int main()
{
int arg = 0;
std::cout << bar(foo<decltype(arg)>, arg) << std::endl;
return 0;
}
虽然这在 clang 9.0 和 msvc v19.24 中有效,但在 gcc 9.2 中失败
gcc 输出:
no matching function for call to 'bar(<unresolved overloaded function type>, int&)' std::cout << bar(foo<decltype(arg)>, arg) << std::endl;
这是gcc中的错误吗? 我也可以在 gcc 中以某种方式绕过这个吗?
Godbolt 链接: https ://godbolt.org/z/oCChAT
对于 gcc,另一种解决方法可以是:
auto f = foo<decltype(arg)>;
std::cout << bar(f, arg) << std::endl;
是的,这应该是gcc 的一个错误,即使在gcc 10.0.1 中也没有修复。
当使用auto
和decltype(auto)
等占位符类型说明符指定返回类型时,gcc 似乎无法处理这种情况。 如果您将返回类型指定为T
,它将正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.