You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 06:10:39