编译包含指向模板函数的指针的初始化列表时,gcc 出错但 clang 没有
Error with gcc but not with clang when compiling initializer list containing pointers to template function
以下代码片段在 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 的修复,live demo 现在可以使用 GCC 主干(未来的 GCC 11)进行编译。
以下代码片段在 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 的修复,live demo 现在可以使用 GCC 主干(未来的 GCC 11)进行编译。