此问题已在此处有答案:
Why doesn't void{} exist?(1个答案)
4天前关闭。
如果我没有弄错的话,允许在函数模板中编写return void()
,以避免void
类型不必要的专门化和重载。
同时,Clang无法识别类似的语法return void{}
:
template<typename T>
T foo() { return T(); }
template<typename T>
T bar() { return T{}; }
int main() {
// ok everywhere
foo<void>();
// error in Clang
bar<void>();
}
Clang 16打印错误:
error: illegal initializer type 'void'
在线演示:https://gcc.godbolt.org/z/6o89reK3G
在cppreference中,我没有找到答案:对于非聚合类型,T()
和T{}
的行为应该相同。并且没有关于void
类型的特别评论。
它只是一个Clang错误,还是相反,它是唯一严格遵循标准的编译器?
1条答案
按热度按时间emeijp431#
这就是CWG2351,显然还没有在Clang中实现。
void()
和void{}
是等价的。