编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错

use*_*670 24 c++ templates initializer-list template-argument-deduction c++17

下面的代码段在 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
}
Run Code Online (Sandbox Code Playgroud)
#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
}
Run Code Online (Sandbox Code Playgroud)

在线编译器

Bul*_*net 1

GCC 错了,但现在不会了!感谢 @Barry 的报告以及 Marek Polacek 的修复,现在可以使用 GCC trunk(未来的 GCC 11)来编译现场演示。