Из приятностей:
- немножко C++23, 26, в частности:
- полезный трейт (C++23) для проверки того, что ссылочка ссылается на временное значение (см. [P2255]);
- запрет возврата ссылок на временные значения (C++26, типа
int &some() { int value; return value; } , см более сложные примеры и мотивацию в [P2748] );- продление времени жизни на ссылку внутри range-based
for (C++23, пример см в [P2718]);-
delete incomplete_pointer; (C++26) теперь ошибка компиляции (раньше было плохо отлаживаемое UB в случае не виртуального деструктора и у нас если пойнтер хранит производный класс, т.к. вызывался денструктор базового класса пойнтера или полиморфный. Теперь можно смазать #include-ом или просто взять std::unique_ptr<> - см [P3144]);- больше constexpr, наконец-то deducing this до конца, атрибут [[assume]], и прочее;
- полная поддержка import-ов модулей (и module unit, и header unit, но не полная поддержка модулей!!!),
- экспериментальная поддержка модулей в clangd (автор просил больше фидбека, если что отломится, писать в этот репозиторий: https://github.com/ChuanqiXu9/clangd-for-modules/issues/ )
- директива #embed, позволяющая инклудить бинарные файлы и работать с ними, как с массивом (C23 и расширение для плюсов - я о ней писал немного раньше тут);
- пачка интересных проверок clang-tidy (например, лучше ловить use-after-move, лучше ловить висячие ссылки);
- переименовали часть LLVM IR-команд/интринсиков для большей консистентности, улучшили тулы, добавили пачку фич в ARM, RISCV
- выкинули AMD 3D-Now! из x86-бэкэнда, и интринсики к командам
AVX512PF, AVX512ER, PREFETCHWT (хз, зачем их выбросили);- начата работа над Parallel STL из C++17 (std::execution_policy::par) и спецматаном из C++17 (функция Бесселя и пр., см [P0226]);
- С LLVM 21 libcxx сделает режим "для ретроманов" - C++03 будет выделен в отдельный набор необновляемых хедеров, чтобы увеличить стабильность сборки старого легаси.
#длиннопостик #llvm #clang #clangd #libcxx #clang_tidy #release