c++ - 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错但 clang 没有
问题描述
以下代码片段在 vc++ 和 clang++ 中编译良好,但在 gcc(inc 9.2)上失败,除非我添加显式强制转换。哪个编译器在这里?
#include <initializer_list>
template<typename T>
void Task(void) {}
int main()
{
for(auto p_task: {&Task<int>}) {} // error
// for(auto p_task: {static_cast<void (*)(void)>(&Task<int>)}) {} // ok
}
<source>: In function 'int main()':
<source>:8:33: error: unable to deduce 'std::initializer_list<auto>&&' from '{(& Task<int>)}'
8 | for(auto p_task: {&Task<int>}) {} // error
| ^
<source>:8:33: note: couldn't deduce template parameter 'auto'
解决方案
GCC 错了,但现在不是了!感谢@Barry 的报告,以及 Marek Polacek 的修复,现在可以使用 GCC 主干(未来的 GCC 11)编译现场演示。
推荐阅读
- python - 带列表的字母计数器
- mysql - 将 SQL 查询转换为 mysql 查询时出错
- git - 为什么git在远程解析增量之前将对象写入远程
- android - android.arch.lifecycle:extensions:1.1.1 目录
- android - 我有一个错误,这是我的错误:确保首先调用 FirebaseApp.initializeApp(Context)
- docker - 所有依赖项都应该安装到 docker 映像吗?或者让它取决于主机
- powershell - PowerShell 在输出 CSV 中包含输入变量
- google-chrome - 无法从“https 服务器”上运行的 chrome pdf 查看器下载文件 PDF
- node.js - 在 Express js 中禁用所有控制台消息
- knockout.js - 从浏览器控制台获取 Knockout.js 的版本?