问题描述
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 在功能上会有区别吗?
编辑:语法
解决方法
它们是等价的。标准甚至has an example of it:
template<typename T> concept C1 = requires(T x) {
{x++};
};
C1 中的复合要求要求 x++
是一个有效的表达式。它等价于简单需求 x++;
。
Compound requirements 能够测试表达式的某些方面,例如它是否为 noexcept 或者结果类型是否满足某些概念。但如果这两个测试都不存在,它只是将模板参数替换到表达式中,验证其有效性,然后收工。