According to cppreference, std::move_iterator sets its ::iterator_category to the category of its underlying iterator1.
But I reckon it can be an input/output iterator at best, since for forward iterators reference must be an lvalue reference, while move_iterator sets reference (and the return type of operator*) to an rvalue reference2.
Is this a blatant mistagging of the iterator with a wrong category?
Being able to do this for my own iterators is undoubtedly convenient. Is there any reason I shouldn't do this, if even the standard library does so?
1 But anything stronger than random_access_iterator_tag is truncated to random_access_iterator_tag, which is weird, since contiguous_iterator_tag is only supposed to be used for ::iterator_concept.
2 Or leaves it untouched if it's not a reference, but then the underlying iterator shouldn't advertise itself as a forward iterator either.