来自 GCC 内部的运算符'>'或'>>'错误需要模板参数中的表达式C++



如果这些表达式有效,我正在测试这些需求,这些需求由模板参数内的>>>的两个基本操作组成:

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>> {};

也许这是我个人的偏好,但我认为这样写的代码也增加了可读性。

相关内容

最新更新