c++ - 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;
推荐阅读
- django - 是否可以在重定向()调用中将模板上下文变量作为参数传递
- amazon-web-services - AWS 自动扩展和 Spot 实例
- python - 如果我将它放在仅在循环中调用的已定义函数中,我如何忽略“继续”的 SyntaxError 在 Python 中未正确循环?
- office-js - OfficeJS Office.context.document.getTaskFieldAsync 在某些重要字段上失败
- django - 将 JWT 访问密钥存储在 Cookie 中,但仍无法访问 API
- java - 打印出 ArrayList 的每个元素而不重复元素并重新打印
- reactjs - 如何使用 react 将数据传递给 Modal。编辑还是删除?
- ruby-on-rails - 将自定义参数传递给 devise.en.yml 以在错误消息中使用
- python - Python的点图,每个不同的颜色?
- java - 为什么我的 JavaCL 只检测到集成显卡?