下面的代码示例似乎可以使用GCC 12.2编译,但与Clang 15和MSVC 19.33不同,由于错误
在这个例子中,函数
标准中似乎相关的段落: 不完全定义的对象类型和cv空类型是不完整的类型([basic.fundamental])。
illegal initializer type 'void'
。我希望所有三个编译器都会拒绝该代码,因为构造(临时)void对象是没有意义的。auto f() { return void{}; }
using t = decltype(f());
在这个例子中,函数
f
只与未求值的操作数一起使用。是否允许像这样使用f
,还是应该拒绝其定义?(我知道合法表达式void()
可以创建一个prvalue,但这不是本帖的重点。)标准中似乎相关的段落: 不完全定义的对象类型和cv空类型是不完整的类型([basic.fundamental])。
一个不完全定义的对象类型的实例的大小和布局是未知的。
void{}
应该是有效的。https://dev59.com/c6_la4cB1Zd3GeqPxsHR?noredirect=1&lq=1 - apple apple