Утвержден стандарт C++17
Комитет ISO по стандартизации языка C++ единогласно утвердил спецификацию C++1z в качестве международного стандарта "C++17". Представленные в спецификации возможности уже полностью поддерживаются в компиляторах GCC и Clang, а также частично реализованы в Intel C++ и Visual C++. Поддерживающие C++17 стандартные библиотеки реализованы в рамках проекта Boost.
В следующие два месяца утвержденная спецификация будет находиться на стадии подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. В начале ноября результирующий вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2017. Тем временем комитет уже начал работу над следующим стандартом C++20 (C++2a) и рассмотрел на последнем совещании возможные новшества.
- Возможность инициализации переменных внутри выражений if и switch;
- Возможность использования кодировки UTF-8 в символьных литералах;
- Шестнадцатеричные литералы с плавающей запятой;
- Указание текстового сообщения в static_assert теперь опционально;
- Удалена поддержка триграфов;
- Возможность указания typename (как альтернативы классам) в параметрах вложенного шаблона;
- Новые правила вывода типа "auto" из списка инициализации (braced-init-list)
- Возможность упрощенного определения вложенных параметров пространств имен: "namespace X::Y {...}" вместо "namespace X { namespace Y {...}}";
- Возможность указания атрибутов для пространств имен и перечислений;
- Новые стандартные атрибуты[[fallthrough]], [[maybe_unused]] и [[nodiscard]];
- Проверка на неизменность (константность) для всех нетипизированных аргументов шаблонов;
- Сворачивание выражений для вариативных шаблонов;
- Раскрытие выражений "if" на стадии компиляции, если заданное внутри условие является константой;
- Структурированные привязки, например, "auto [a, b] = getTwoReturnValues()";
- Автоматическое определение типов конструктора шаблонов (например, теперь можно указывать std::pair(5.0, false), явно не задавая типы "double, bool");
- Inline-переменные, которые можно определять в заголовочных файлах;
- Добавлена библиотека для работы с ФС, основанная на boost::filesystem;
- Из библиотеки TS I перенесены std::string_view, std::optional и std::any;
- Добавлен std::uncaught_exceptions в качестве замены std::uncaught_exception;
- Новые функции вставки try_emplace и insert_or_assign для std::map и std::unordered_map;
- Унифицирован доступ к контейнерам std::size, std::empty и std::data;
- Определены непрерывные итераторы (contiguous iterators);
- Удалены устаревшие типы и функции, в том числе std::auto_ptr, std::random_shuffle;
- Представлены параллельно выполняемые варианты алгоритмов STL;
- Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя;
- Представлены std::variant и std::byte;
- Новые свойства логического оператора: std::conjunction, std::disjunction и std::negation.