c++ return语句中临时void对象的值初始化[重复]

mwyxok5s  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(158)

此问题已在此处有答案

Why doesn't void{} exist?(1个答案)
4天前关闭。
如果我没有弄错的话,允许在函数模板中编写return void(),以避免void类型不必要的专门化和重载。
同时,Clang无法识别类似的语法return void{}

  1. template<typename T>
  2. T foo() { return T(); }
  3. template<typename T>
  4. T bar() { return T{}; }
  5. int main() {
  6. // ok everywhere
  7. foo<void>();
  8. // error in Clang
  9. bar<void>();
  10. }

Clang 16打印错误:

  1. error: illegal initializer type 'void'

在线演示:https://gcc.godbolt.org/z/6o89reK3G
cppreference中,我没有找到答案:对于非聚合类型,T()T{}的行为应该相同。并且没有关于void类型的特别评论。
它只是一个Clang错误,还是相反,它是唯一严格遵循标准的编译器?

emeijp43

emeijp431#

这就是CWG2351,显然还没有在Clang中实现。
void()void{}是等价的。

相关问题