如果这些表达式有效,我正在测试这些需求,这些需求由模板参数内的>
或>>
的两个基本操作组成:
template <typename T>
struct dummy
: std::bool_constant<
requires (const T& a, const T& b) {
a > b;
a >> b;
}> {};
有了Clang,它编译得很好。但对于GCC,它给了我以下几个错误:
<source>:7:7: error: expected ';' before '>' token
7 | a > b;
| ^~
| ;
<source>:8:7: error: expected ';' before '>>' token
8 | a >> b;
| ^~~
| ;
因此,为了抑制这些错误,我必须用括号覆盖表达式:
template <typename T>
struct dummy
: std::bool_constant<
requires (const T& a, const T& b) {
(a > b);
(a >> b);
}> {};
现在,GCC编译良好。
即便如此,这个问题可能与C<42, sizeof(int) > 4>
的问题类似,但在这种情况下,>>
和>
的操作已被required表达式requires (...) { ... }
中的大括号括起来
不幸的是,我无法在GCC上提交错误,因为我还没有帐户,也没有注册。
似乎您自己也找到了解决方法,但我发现如果您将requires
表达式作为一个概念,代码也会编译:
template<typename T>
concept MyConcept=requires (const T& a, const T& b) {
a > b;
a >> b;
};
template <typename T>
struct dummy : std::bool_constant<MyConcept<T>> {};
也许这是我个人的偏好,但我认为这样写的代码也增加了可读性。