LINUX.ORG.RU

C++ 17 формально заапрувили

 


2

5

Поискал поиском, еще не было?

Пруф: https://herbsutter.com/2017/09/06/c17-is-formally-approved/

Из Википедии:

  • Стандартная библиотека языка Си была обновлена и адаптирована с версии C99 до C11;
  • Добавления текстового сообщения по-умолчанию для static_assert;
  • Удаление триграфов;
  • Использование typename в параметрах шаблона, находящегося внутри параметров другого шаблона;
  • Новые правила вывода типа для auto из списка инициализации (std::initializer_list);
  • std::uncaught_exceptions, как замена std::uncaught_exception;
  • Определение вложенных пространств имён: namespace A::B {};
  • Атрибуты для перечислений и пространств имён;
  • Символьные литералы UTF-8;
  • Оценка константности для всех нетипизированных аргументов шаблонов;
  • Упакованные выражения template<typename... As> void foo(As... args) { return (args && ...); } ;
  • Новые методы вставки для std::map и std::unordered_map;
  • Унифицированный доступ к размеру контейнеров std::size();
  • Определение «Смежный итератор»;
  • Удаление некоторых устаревших типов и функций, например, таких как std::auto_ptr, std::random_shuffle или старых функциональных адаптеров;
  • Библиотека файловой системы, основанная на boost::filesystem;
  • Параллельные версии алгоритмов STL;
  • Некоторые математические функции;
  • Большую часть экспериментальной библиотеки TS I.
  • Новый синтаксис для распаковки пар, кортежей и прочих типов, для которых реализован std::get. Например: auto x = std::make_tuple(4,6,7); auto [a,b,c] = x;
  • Инициализация переменной в if и switch. Например: if(auto a = getA(); a.isValid()) {}
  • Автоматический вывод аргументов шаблона класса; также поддерживается ручное указание правил вывода.
★★★★☆

Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

но ведь половина мира сразу же сломается от этого

Реализации не обязаны выбрасывать фичи, удаленные из стандарта. Например, в libc++ достаточно задать при сборке -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR и у тебя в с++17 будет auto_ptr:

https://github.com/llvm-mirror/libcxx/commit/b4d17ade8956ef2c77cbb6e7cd9461ed...

Хотя конечно auto_ptr надо выкидывать сразу при переходе на С++11, так что совет выше для слоупоков или для совсем аццкого легаси где новый код соседствует с двадцатилетним

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от stevejobs

люди годами боролись чтобы запретить вообще операцию присваивания там

Пардон муа, но при наличии в выражении внутри if типа или auto иниициализацию перепутать с проверкой равенства можно только по-пьяни

annulen ★★★★★
()
19 мая 2018 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.