c++ - 推导显式特化的函数模板类型
问题描述
在以下代码中,GCC 无法编译(1)(无法推断F
),但成功编译(2)。这里的关键点是bar
模板推导出的返回类型,否则 GCC 不会失败。
但是,Clang 编译整个代码没有错误。
b
除了作为函数指针之外,在这种情况下,(1) 和 (2) 之间的本质区别是什么?它是 GCC 中的错误,还是这里有一些不正确的东西?
template<class>
auto bar() {
return 0;
}
template<class F>
void foo(F&&) {
}
int main () {
foo(bar<int>); // (1)
auto b = bar<int>;
foo(b); // (2)
}
解决方案
是的,这是一个已经存在一段时间的 GCC 错误:https ://gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=64194
推荐阅读
- android - Google 身份验证不适用于 React Native 应用程序的捆绑 apk
- c# - Xamarin MediaElement:setDataSource 在 URL 上失败
- reactjs - amcharts 5,反应原生 webview
- reactjs - 反应 mongodb 将文本传递到后端以进行搜索功能
- react-native - 出现无法解释的错误“需要未知模块 '4'”
- android - 如何在 HTML 表单的文本输入字段中将 Android 移动软键盘上的下一个按钮更改为提交/开始按钮?
- python-3.x - 我如何使用 while 循环打印 1 到 10,但 3 除外?我想用 Python 代码写
- swift - 如何在swiftUI中从API json文件中的数据创建变量
- python - Zeller 的同余给出了错误的结果(Python)
- javascript - 按新用户时node.js出错