C++26 снимает один из последних синтаксических запретов на
constexpr — виртуальное наследование. Sandor Dargo разбирает пейпер P3533R2 Ханы Дусиковой.• Раньше класс с виртуальными базами нельзя было даже сконструировать при константных вычислениях. Constexpr-конструкторы и деструкторы запрещались на уровне синтаксиса
• P3533R2 убирает запрет целиком. Ромбовидное наследование с виртуальной базой теперь работает на этапе компиляции: constexpr auto ch = Child{} компилируется, оба пути ведут к одному субобъекту
• Мотивация практическая: basic_ios виртуально наследует ios_base. Без этого невозможны constexpr-потоки, форматирование потоков и исключения chrono на этапе компиляции
• Понятие constexpr-suitable становится тавтологией и уходит из стандарта. Синтаксических ограничений не остаётся — только правила вычислимости из [expr.const]
• Реализовать в clang несложно: поиск самого внешнего объекта уже есть для виртуальных вызовов, остаётся расширить APValue
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#свежак