编译包含指向模板函数的指针的初始化器列表时,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'

online compiler

t314159 回答:编译包含指向模板函数的指针的初始化器列表时,gcc发生错误,但clang发生错误

GCC是错误的,但现在不再存在!多亏@Barry报告了它,并且Marek Polacek对其进行了修复,live demo现在可以使用GCC主干(将来的GCC 11)进行编译了。

本文链接:https://www.f2er.com/2845803.html

大家都在问