为什么view_interface::dataconst重载需要额外检查constD是否满足ranges::range?
根据[view.interface],非常量和常量重载data函数定义如下:
template<class D>
requires is_class_v<D> && same_as<D, remove_cv_t<D>>
class view_interface : public view_base {
private:
constexpr D& derived() noexcept { // exposition only
return static_cast<D&>(*this);
}
constexpr const D& derived() const noexcept { // exposition only
return static_cast<const D&>(*this);
}
public:
constexpr auto data() requires contiguous_iterator<iterator_t<D>> {
return to_address(ranges::begin(derived()));
}
constexpr auto data() const
requires range<const D> && contiguous_iterator<iterator_t<const D>> {
return to_address(ranges::begin(derived()));
}
};
为什么data() const需要另外满足const D是 a ranges::range?不是iterator_t<const D>已经受到限制,所以const D必须是一个ranges::range?
来requires range<const D>这里的真正目的是什么?有一种情况D是ranges::range与const D不是ranges::range?
THE END
二维码