【发布时间】:2020-06-23 07:27:37
【问题描述】:
我正在尝试将函数模板作为参数传递给另一个函数,如下例所示。
#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 中以某种方式规避这个问题吗?
【问题讨论】:
标签: c++ templates gcc c++14 function-templates