Поддержка контрактного программирования на C++ был принят в рабочем проекте C++20 в Рапперсвиле. Одной из частей этой языковой функции является понятие обработчика нарушений, который будет вызываться при нарушении контракта.
Отчет о поездке Херба Саттера говорится, что:
Вы можете установить свой собственный обработчик нарушений и отправить сборку релиза с возможностью включения принудительного применения во время выполнения.
Но формулировка в [dcl.attr.contract], в этой статье добавлено:
Обработчик нарушений программы — это функция типа «
noexcept
opt функция (ссылка lvalue наconst std::contract_violation
), возвращающаяvoid
», и определяется способом, определяемым реализацией. [...] Не должно быть программного способа установки или изменения обработчика нарушений. Реализация определяет, как устанавливается обработчик нарушений для программы и как устанавливается значение аргументаstd::contract_violation
([support.contract.cviol]), за исключением случаев, указанных ниже.
Мне это очень непонятно. Как реализация может позволить мне установить собственный обработчик нарушений непрограммным способом? Что мне придется делать с gcc, clang и msvc?