Здравствуйте, YuriV, Вы писали:
YV>vector<bool> это, как раз, пример когда специализация сужает область применения обобщённой сущности, что есть нонсенс, а значит ошибка архитектуры. Если к специализации нужно писать отдельную рекомендацию по применению, то от такой специализации нужно отказаться. Как здесь правильно сказали следует использовать отдельный тип.
По поводу vector<bool> уже сломано немало копий и мне не хотелось бы в этом топике возобновлять эту дискуссию. Главное, что я хотел выразить здесь:
http://rsdn.org/forum/cpp/7353947.1Автор: rg45
Дата: 21.01.19
, это то, что операции разыменовывания итераторов всех (почти) стандартных контейнеров являются lvalue выражениями, а значит и переменная range for цикла, как бы она ни была объявлена, никак не может быть rvalue ссылкой. А vector<bool> в этом случае — то самое исключение, которое лишь подтверждает общее правило.