Проблема курицы и яйца тут решается легко: стандарт - закон. Всё. Ну а если что-то из стандарта в некой конкретной реализации не реализовано, так об этом написано большими буквами в реадми. Так что статус-кво так или иначе соблюдается, хоть это и не всегда радует.
Изменения в стандарте - до сих пор такая практика используется - всегда (почти) идёт с соблюдением обратной совместимости. Примеров тому немало - абсолютно неструктурный, но стандартизованный в этой своей форме switch; ключевые слова auto, inline и register, давно уж изжившие себя; С-библиотека вместо аналогичной по фунциональности "портированной" в C++; трёхвариантный char (знаковый, беззнаковый и
никакой), вместо отдельно char и отдельно какие-нибудь signed/unsigned
byte, например; итп. На нарушение принципа обратной совместимости идут крайне редко, и то только тогда, когда изменений в существующих проектах либо мало, либо они несложно реализуются. Либо таких проектов в принципе немного, хотя тут оценки, конечно, приблизительные. Например, отмена неявного int в составных типах. Поэтому нормально (читай, переносимо) написанный проект будет требовать совсем мало усилий для поддержки и сопровождения, не взирая ни на какие изменения в стандарте.
Другое дело, когда проект насквозь пронизан расширениями стандарта. Тут авторам не позавидуешь. С другой стороны, кто им виноват, что они сами себя загнали в угол? Это я к
Цитата: ...но кто ж например у нас в стране соблюдает все законы
Можно не соблюдать, но потом винить, кроме себя, будет некого.
Что касается "законодательной" силы стандарта. Я в эпоху перед откровением как-то набросал большущую библиотеку, которая вся сплошь была метапрограммной. (Кстати, во время её написания "откровение" как раз и наступило.
) При том, что в то время её мог потянуть только Intel Compiler (точнее, всё, что юзает EDG, но не суть). Сейчас её прекрасно понимают (из доступных мне реализаций) Comeau и MSVC. Так что стандарт - это
законодательная сила.