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

用户定义deduction guide能否受尾随requires-clause约束?代码合法性及标准解析

C++20中用户定义推导指南的requires子句合法性问题

问题1:用户定义的推导指南能否带有尾随requires-clause?

根据C++20标准,用户定义的类模板推导指南不允许带有尾随的requires子句。标准在[over.match.class.deduct]章节明确了推导指南的语法结构,其中并未预留requires子句的合法位置,因此这类写法属于违反标准的语法错误。

问题2:给定代码示例是否合法?C++20标准对此有何规定?

提供的代码示例不合法,具体分析如下:

template<typename...>
struct s { s(auto) {} };
s(auto) -> s<> requires true; // 违反标准的写法
static_assert(sizeof(s{true}));

Clang的报错是符合C++20标准的行为,而GCC、MSVC的不一致表现属于实现层面的偏差(MSVC的崩溃更是明显的实现缺陷)。

标准中,类模板推导指南的定义语法仅允许指定模板参数、函数参数以及推导目标,不支持通过requires子句对推导指南添加约束。任何给推导指南附加requires子句的写法都属于语法错误,编译器应当拒绝这类代码。

Clang错误信息

<source>:7:25: error: deduction guide cannot have a requires clause
    7 | s(auto) -> s<> requires true;
      |

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:58:15