В каждой версии стандарта C ++ есть ошибки.Сотни из них.
Реализации C ++ стремятся быть полезными, поэтому они не порабощенно придерживаются опубликованного стандартного текста.Нет причин поддерживать совместимость «ошибка за ошибкой» с листом бумаги.
(В качестве крайнего примера, до C ++ 17 стандарт технически требовал, чтобы <int>
в std::vector<int> v;
был проанализирован как header-name , а затем отклонено, потому что оно не находится внутри директивы * 1009. * Само собой разумеется, что no компилятор сделает это.)
Cppreferenceтакже стремится быть полезным.Поэтому мы не поддерживаем совместимость «ошибка за ошибкой» со стандартами.Когда фрагмент текста впервые появился на листе бумаги, опубликованном ISO, бесполезен (за исключением стандартных историков, возможно);как программисты, мы заботимся о том, что мы получаем, когда используем -std=c++17
, или каков бы ни был эквивалентный флаг вашей реализации.В результате наша документация предназначена для гипотетически полной и правильной реализации каждого стандарта C ++, а также всех последующих исправлений и пояснений, применимых к этому стандарту. * Мы используем текущие реализации в качестве доказательства того, что такая гипотетическая реализация будетdo.
Когда для конкретного изменения существует нет текущей реализации, мы оцениваем природу изменения, чтобы предсказать, как реализации будут его обрабатывать.Изменения в базовом языке, предназначенные для обратной силы, помечаются как отчеты о дефектах, которые облегчают вызов (хотя иногда они не доходят до конца, а , что отсутствует в маркировке).Изменения в библиотеке не сопровождаются постоянно применяемыми метками «DR», поэтому вызов остается за нами.
В данном конкретном случае, хотя P0608 не помечен как отчет о дефектах, он исправляет крайне сомнительныеповедение в C ++ 17 вскоре после его публикации.Кроме того, крайне нежелательно, чтобы код, подобный std::variant<std::string, bool> x = "abcd";
, молча изменял значение в той же реализации в зависимости от стандартного режима.Код, основанный на std::variant
, также редко встречается в дикой природе (отчасти, поэтому комитет даже одобрил «критические» изменения в первую очередь).В результате я предсказал, что документ в конечном итоге будет применен задним числом, и соответствующим образом задокументировал его.
* Это изменение в философии, появившееся несколько лет назад;в результате у нас все еще есть много случаев, когда исправление не рассматривается как задним числом в документации, но должно быть.Со временем они медленно очищаются.