首页 > 解决方案 > C++ 概念 没有 noexcept 和 return-type-requirement 的复合需求与简单需求

问题描述

template<class T>
concept C1 = requires(T a, T b) { a + b; };

template<class T>
concept C2 = requires(T a, T b) { { a + b }; };

C1和C2在功能上会有区别吗?

编辑:语法

标签: c++c++20concept

解决方案


它们是等价的。该标准甚至有一个例子

template<typename T> concept C1 = requires(T x) {
 {x++};
};

C1 中的复合要求要求这x++是一个有效的表达式。它等价于 simple-requirement x++;

复合需求能够测试表达式的某些方面,例如它是否为 noexcept 或结果类型是否满足某些概念。但是如果这些测试都不存在,它只是将模板参数替换到表达式中,验证其有效性,然后就结束了。


推荐阅读