void对象构造合法性探讨:GCC与其他编译器行为差异
关于
void{}作为返回值的编译合法性讨论 这段代码可通过GCC 12.2编译,但Clang 15和MSVC 19.33会抛出“illegal initializer type 'void'”错误。我认为所有编译器都应当拒绝该代码——构造(临时)void对象完全没有意义。
auto f() { return void{}; } using t = decltype(f());
示例中的函数f仅被用于未求值操作数,这种使用方式是否被允许?还是连它的定义本身就应该被编译器拒绝?(我知晓合法表达式void()可以生成prvalue,但这并非本次讨论的重点。)
相关标准条款
[basic.types]/5
未完全定义的对象类型和cv限定的void属于不完全类型(见[basic.fundamental])。
[basic.types]/注43
未完全定义的对象类型实例的大小和布局未知。
内容的提问来源于stack exchange,提问作者303
相关产品推荐
相关产品推荐

