Дополнение: также доступен Trip Report:
https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/Коротко:
1. Модули;
2. Корутины;
3. Захват статических, локальных для потока (thread_local) и структурных привязок (structured bindings) в лямбдах;
4. Функции линейной интерполяция (известной как lerp) и среднее значение (std::midpoint);
5. Новая политика выполнения std::execution::unseq;
6. Специально для любителей Qt и int'ов в качестве переменных для хранения размера: функция ssize();
7. Улучшения и фиксы в уже принятом в прошлый раз std::span;
8. Перегрузка для функции поиска по unordered_map, использующая предварительно рассчитанное значение (precalculated value);
Далее идет список того, что скорее всего добавят в Июле 2019 года, на встрече в Кёльне:
1. Выражения для расширения из любой последовательности данных по аналогии с pack expansion из шаблонов с переменным числом аргументов
Пример:
auto tup = std::make_tuple(0, 1, 'a', 2.7);
for ... (auto elem : tup) {
std::cout << elem << std::endl;
}
Расширяется в
auto tup = std::make_tuple(0, 1, 'a', 2.7);
std::cout << tup.get<0>() << std::endl;
std::cout << tup.get<1>() << std::endl;
std::cout << tup.get<2>() << std::endl;
std::cout << tup.get<3>() << std::endl;
2. Расширение библиотеки синхронизации C++ (новые функции для работы с атомарными значениями);
3.
std::format
, основанный на
fmtlib
(см.
пост в нашем соседнем канале);
4. constexpr vector;
5. Предложение, разрешающее делать constexpr-аллокации, которые можно удалить ("заоптимизировать" или "устранить" (elide)) на этапе компиляции;
6.
constexpr
-версия оператора == для
type_info
;
7. Концептуально новые итераторы, предназначенные только для перемещения;
8. Монадические функции для
optional
:
transform
(преобразовать значение),
and_then
(сделать что-то, если значение есть) и
or_else
(сделать что-то, если запрашиваемого значения нет);
9.
std::source_location
вместо
__FILE__
и
__LINE__
;
10. Адаптер для плоских отображений (flat maps), позволяющий делать отображения поверх контейнеров;
11. Адаптер для плоских множеств (flat sets);
12. Класс
ostream_joiner
для вывода в ostream значения с использованием разделителя;
13. Стектрейс;
14.
std::byteswap
на замену hton*-функциям;
15. Новое слово`constinit` для переменных, которые используют статический спецификатор памяти для обозначения намерения программиста использовать статическую область памяти;
16. Объявить некоторые варианты использования ключевого слова
volatile
устаревшими, т.к. они не имеют желаемого эффекта в некоторых случаях;
17. Уточнение правил языка, касающихся инициализации полей неинициализированных объектов и
std::bless
;
18. Разрешить использование
using
для перечислений;
Что уже было принято раньше:
1. Концепты;
2. Контракты;
3. Диапазоны;
4. Оператор <=> (🛸 / "НЛО") для генерации операторов сравнения;
5. Макросы для проверки возможностей компилятора;
6.
std::span
;
7. Синхронизированный вывод;
8.
std::atomic_ref
.
#cpp #iso #news #update #cpp20