【发布时间】:2020-04-24 14:34:44
【问题描述】:
上一次我在 GCC 中使用 C++ 概念,并且 fconcepts 标记了以下 sn-p 用于工作
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++ 标准)简短的 sn-p 变为
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 概念中的“隐式使用的模板参数”非常令人恼火和令人困惑。
【问题讨论】:
-
"因此完美可读且(对于 C++ 标准)简短的 sn-p 变为" “完全可读”这个短语完全取决于谁在阅读。如果阅读的人不知道
-> type的意思是“可转换为”而不是“相同”,那就有问题了。 -
@Barry 是的,你是对的。我需要一本涵盖概念的 C++ 书籍。