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

无括号requires的C++代码编译分歧:MSVC通过GCC报错,谁合规?

关于C++ requires表达式括号要求的标准符合性确认

以下是一段未用括号包裹requires表达式的C++代码:

#include <type_traits>

template<typename T> requires !std::is_enum_v<T>  
void foo(T)
{

} 
int main()
{
    foo(4); //msvc编译通过但gcc和clang报错 
}

这段代码可通过MSVC编译,但GCC和Clang会报错,其中GCC的报错信息如下:

<source>:3:31: error: expression must be enclosed in parentheses
    3 | template<typename T> requires !std::is_enum_v<T>
      |                               ^~~~~~~~~~~~~~~~~~
      |                               (                 )
Compiler returned: 1

明确不需要解决方案(已知添加括号可解决),仅从学术角度确认:GCC和Clang的行为符合C++标准,MSVC不符合。

标准依据说明

根据C++20标准对requires子句的语法定义,当requires后的表达式以一元运算符(如!)开头时,必须用括号包裹该表达式。这类表达式不属于语法定义中的“primary-expression”范畴,不加括号会导致语法歧义,标准要求编译器对此报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:52:08