История изменений
Исправление quasimoto, (текущая версия) :
open-std.org это уже не бложики, а процесс написания стандарта.
Что мы имеем — 98, 03 и 11 стандарты описывают требования на «container» и «forward iterator» одинаково (отличия не значительны в данном вопросе) и специализируют vector<bool> одинаково, дальше есть все эти предложения на open-std.org, явно говорящие, что vector<bool> и его итератор не удовлетворяет этим требованиям, в 11-ом это никак решено не было, вместо этого был добавлен текст:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2353.html
причём этот же человек отдаёт себе отчёт в том, что формально оно не удовлетворяет требованиям:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2204.html
The 2003 Standard requires a partial specialization of the standard library vector container for bool values. This specification has a number of problems (explained many times over the years) and it has been agreed in principle it should be deprecated (and not removed) in the next Standard, and a replacement provided. See LWG Issue 96 and Beman Dawes paper n2160 for further details if required.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2130.html#96
Vector<bool> is not a container
и т.д. в обратном хронологическом до Саттеровского предложения.
То что слово «container» два раза употребляется в том тексте что-то меняет? Нет — требования «container» и «forward iterator» не выполняются (оставляя в стороне прочую семантику других vector), можно писать стандартный обобщённый код работающий с контейнерами и такими итераторами и не работающий с vector<bool>.
В принципе, проблема не выглядит решённой, вот есть более новое обсуждение:
http://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/8kQzWI61ROU
То есть требования оставлять и устранять специализацию, либо обобщать требования, чтобы можно было писать proxy итераторы и т.п., в бусте есть концепты, опять же:
http://www.boost.org/doc/libs/1_55_0/libs/iterator/doc/index.html#new-style-i...
но всё равно специализация не Ъ — есть контейнеры array и vector для статических и динамических массивов, есть классы bitset и dynamic_bitset для статических и динамических битовых массивов.
Исходная версия quasimoto, :
http://www.open-std.org это уже не бложики, а процесс написания стандарта.
Что мы имеем — 98, 03 и 11 стандарты описывают требования на «container» и «forward iterator» одинаково (отличия не значительны в данном вопросе) и специализируют vector<bool> одинаково, дальше есть все эти предложения на http://www.open-std.org, явно говорящие, что vector<bool> и его итератор не удовлетворяет требованиям этим требованиям, в 11-ом это никак решено не было, вместо этого был добавлен текст:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2353.html
причём этот же человек отдаёт себе отчёт в том, что формально оно не удовлетворяет требованиям:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2204.html
The 2003 Standard requires a partial specialization of the standard library vector container for bool values. This specification has a number of problems (explained many times over the years) and it has been agreed in principle it should be deprecated (and not removed) in the next Standard, and a replacement provided. See LWG Issue 96 and Beman Dawes paper n2160 for further details if required.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2130.html#96
Vector<bool> is not a container
и т.д. в обратном хронологическом до Саттеровского предложения.
То что слово «container» два раза употребляется в том тексте что-то меняет? Нет — требования «container» и «forward iterator» не выполняются (оставляя в стороне прочую семантику других vector), можно писать стандартный обобщённый код работающий с контейнерами и такими итераторами и не работающий с vector<bool>.
В принципе, проблема не выглядит решённой, вот есть более новое обсуждение:
http://groups.google.com/a/isocpp.org/forum/#!topic/std-proposals/8kQzWI61ROU
То есть требования оставлять и устранять специализацию, либо ещё обобщать требования, чтобы можно было писать proxy итераторы и т.п., в бусте есть концепты, опять же:
http://www.boost.org/doc/libs/1_55_0/libs/iterator/doc/index.html#new-style-i...
но всё равно специализация не Ъ — есть контейнеры array и vector для статических и динамических массивов, есть шаблонные классы bitset и dynamic_bitset для статических и динамических битовых массивов.