Fed*_*dor 6 c++ templates return void language-lawyer
如果我没记错的话,允许return void()
在函数模板中编写以避免不必要的专业化和void
类型重载。
同时,return void{}
Clang 不识别类似的语法:
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>();
}
Run Code Online (Sandbox Code Playgroud)
Clang 16 打印错误:
error: illegal initializer type 'void'
Run Code Online (Sandbox Code Playgroud)
在线演示: https: //gcc.godbolt.org/z/6o89reK3G
在cppreference中,我没有找到答案:对于非聚合类型T()
, 和T{}
应该表现相同。并且没有关于void
类型的特殊注释。
这只是一个 Clang bug,还是相反,它是唯一严格遵循标准的编译器?