Не должен iterator_traits:: iterator_category быть input_iterator_tag? - PullRequest
0 голосов
/ 12 декабря 2018

Недавно я узнал, что ForwardIterator s требует operator * для возврата по ссылке, что означает, что итераторы, которые возвращают прокси, такие как std::vector<bool>, не могут быть ForwardIterator s ( [forward.iterators] ).

Однако я протестировал std::iterator_traits<std::vector<bool>::iterator>::iterator_category в разных компиляторах ( G ++ , Clang , MSVC ) и это всегда было std::random_access_iterator_tag.Это соответствует вышеуказанному требованию?

1 Ответ

0 голосов
/ 12 декабря 2018

Нет, это не так.Это часть большой проблемы с vector<bool>.

Стандарт противоречит сам себе.В нем говорится, что итераторы vector имеют произвольный доступ, но определяют vector<bool> таким образом, что его итераторы не удовлетворяют требованиям RandomAccessIterator.

. Эта древняя статья Херба Саттера объясняет этои другие минусы: http://www.gotw.ca/publications/N1185.pdf

...