【发布时间】:2020-01-27 11:51:08
【问题描述】:
在即将到来的 C++20 范围内,range concept 将具有以下定义:
template< class T >
concept range = __RangeImpl<T&>; // exposition-only definition
template< class T >
concept __RangeImpl = requires(T&& t) {
ranges::begin(std::forward<T>(t)); // equality-preserving for forward iterators
ranges::end (std::forward<T>(t));
};
template< class T >
concept __ForwardingRange = ranges::range<T> && __RangeImpl<T>;
将其翻译成简单的英语我想说,满足范围概念的类型的唯一要求是可以使用 range::begin 和 range::end 调用。
但是,如果我创建一个空类型,只是开始和结束,则范围概念上的静态断言会失败?
namespace ranges = std::experimental::ranges;
struct A {
void begin() {}
void end() {}
};
static_assert(ranges::range<A>);
我错过了什么?
【问题讨论】:
-
“仅展示”的含义显然是您所缺少的。这不是一个真正的定义。阅读链接页面的其余部分。
标签: c++ range c++-concepts