这给出了一个错误:
template <class T, T A, T B>
requires A > B // <-- error
class X{};
error: parentheses are required around this expression in a requires clause
requires A < B ~~^~~ ( )
几乎所有的运算符都会给出这个错误(requires A > B
, requires A == B
, requires A & B
, 需要 !A
)
但是 &&
和 ||
似乎有效:
template <class T, T A, T B>
requires A && B // <-- ok
class X{};
在 godbolt 上使用 gcc 主干和 clang 主干(2020 年 5 月)进行测试。两种编译器给出相同的结果。
最佳答案
Requires 子句使用特殊的表达式语法来避免certain pathological parsing ambiguities .如前所述on cppreference , 允许的形式是
- 一个primary expression
- 用运算符
&&
连接的一系列主要表达式 - 前面提到的一系列表达式,用运算符
||
连接
关于c++ - 什么时候需要用括号括起 requires 子句表达式? (一语双关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61634337/