![](/img/trans.png)
[英]random_access_iterator does not convert to input_iterator in std::any_if
[英]Why is my iterator not std::input_iterator?
為什么下面的迭代器不滿足std::input_iterator
概念? 我錯過了什么?
template <class T>
struct IteratorSentinel {};
template <class T>
class Iterator
{
public:
using iterator_category = std::input_iterator_tag;
using value_type = T;
using difference_type = std::ptrdiff_t;
using pointer = value_type*;
using reference = value_type&;
Iterator() = default;
Iterator(const Iterator&) = delete;
Iterator& operator = (const Iterator&) = delete;
Iterator(Iterator&& other) = default;
Iterator& operator = (Iterator&& other) = default;
T* operator-> ();
T& operator* ();
bool operator== (const IteratorSentinel<T>&) const noexcept;
Iterator& operator++ ();
void operator++ (int);
};
以下 static 斷言失敗:
static_assert(std::input_iterator<Iterator<int>>);
而且,例如,下面的代碼無法編譯:
template <class T>
auto make_range()
{
return std::ranges::subrange(Iterator<T>(), IteratorSentinel<T>{});
}
std::ranges::equal(make_range<int>(), std::vector<int>());
您的operator*
不是const
合格的。
std::input_iterator
概念(通過std::indirectly_readable
概念)要求*
可以應用於const
和非const
左值以及類型的右值,並且在所有情況下都返回相同的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.