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

C++20中int类型prvalue调用为何无意义?MSVC行为存疑

C++20中int类型prvalue调用的标准规则解析

这看起来是个离谱的问题,但MSVC的表现确实让人摸不着头脑——依据C++20标准的哪条规则,调用int类型的prvalue属于无意义操作?对应的测试代码如下:

// clang: 不通过,gcc: 不通过,msvc: 为何能通过?
static_assert(requires { requires noexcept(int{}()); });

标准依据

根据C++20标准的**[expr.call](函数调用表达式)条款:
函数调用的操作数必须是可调用实体,包括函数、函数指针、成员函数指针,或者重载了operator()的类/对象类型。而int是标量类型,既不属于可调用实体范畴,也没有定义operator()成员,因此int{}()这种试图对int类型prvalue执行函数调用的表达式,本身是
格式错误**的,属于无意义操作。

编译器差异说明

Clang和GCC都严格遵循标准,正确识别了这个错误并拒绝编译;但MSVC在此处出现了非标准行为,错误地允许了该表达式通过编译。

内容的提问来源于stack exchange,提问作者303

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:03:14