LINUX.ORG.RU

История изменений

Исправление Begemoth, (текущая версия) :

Краткий ответ - это зависит от людей, которые писали, но в целом отсутствие каких-либо вещей в стандартной библиотеке, не означает, что этого нет в других библиотеках или же нельзя написать своё, чтобы локализовать небезопасный код.

нуль-терминированные строки,

Это ты так char* назвал? Так-то для обеспечения совместимости с C API std::basic_string<> тоже держит строку нуль-терминированной. char* без оберток уже давно не используется, даже для не владеющих строк делали свои классы a la std::string_view.

юнионы

boost::variant уже давно существует, или же использовали наследование. Дело в том, что до С++11 union с классами с нетривиальными конструкторами и деструктором использовать было нельзя.

неумные указатели

Ещё до С++11 делали либо свои умные указатели, либо из библиотек использовали (того же boost).

Из библиотек, те же Boost, Qt, Poco.

Что касается UB - оно есть, никуда не делось, и его надо учитывать при написании программ. Это тоже типа фича, простор для оптимизации.

Исходная версия Begemoth, :

Краткий ответ - это зависит от людей, которые писали, но в целом отсутствие каких-либо вещей в стандартной библиотеке, не означает, что этого нет в других библиотеках или же нельзя написать своё, чтобы локализовать небезопасный код.

нуль-терминированные строки,

Это ты так char* назвал? Так-то для обеспечения совместимости с C API std::basic_string<> тоже держит строку нуль-терминированной. char* без оберток уже давно не используется, даже для не владеющих строк делали свои классы a la std::string_view.

юнионы

boost::variant уже давно существует, или же использовали наследование. Дело в том, что до С++11 union с классами с нетривиальными конструкторами и деструктором использовать было нельзя.

неумные указатели

Ещё до С++11 делали либо свои умные указатели, либо из библиотек использовали (того же boost).