C ++概念复合要求和返回类型要求

上一次我在GCC上使用C ++概念,并且fconcepts标记了以下代码段

template <typename T, typename U>
concept equality_comparable = requires(T a, U b) {
  { a == b } -> bool;
  { a != b } -> bool;
};

显然情况已不再如此,复合需求之后的return-type-requirement现在只能包含类型约束。如果我没有记错的话,这基本上意味着要使用另一个概念来满足return-type-requirement。

因此,完美的可读性(对于C ++标准)的简短摘要成为

template <typename From, typename To>
concept convertible_to = std::is_convertible_v<From, To>;

template <typename T, typename U>
concept equality_comparable = requires(T a, U b) {
  { a == b } -> convertible_to<bool>;
  { a != b } -> convertible_to<bool>;
};

当然,这甚至不是一个完整的实现,但是现在让我们忽略它。有人可以向我解释为什么委员会决定改变这一点吗?我个人认为,convertible_to概念中的“隐式使用的模板参数”非常令人讨厌和混乱。

评论