Нет особых различий в реализации в отношении нарушений контракта. « уровень сборки » определяет, выполняется ли проверка контракта на всех . Обработчик нарушения будет вызываться для любых проверенных контрактов, которые не выполняются.
Прототип для обработчика определяется спецификацией. Единственная разница реализации в отношении обработчика нарушений - это то, как вы его установили. Обратите внимание, что «определенный реализацией» не означает «не позволяет этому случиться». То есть, стандарт говорит, что будет механизмом для установки обработчика , и что этот механизм будет документирован с реализацией (вот что "реализация «определено» означает, в отличие от просто «не указано»). Именно то, чем является этот механизм, будет зависеть от реализации, но не предоставляя его, не вариант.
Единственная реальная проблема, которая может возникнуть, - это если несколько реализаций решают разрешить пользователям указывать обработчик, благословляя определенное глобальное имя, и если эти реализации используют другое глобальное имя. Однако, учитывая, что выбор глобального имени является плохой идеей по многим причинам (конфликт с существующим кодом, макросами и т. Д.), Маловероятно, что это станет проблемой в реальности. Поэтому, скорее всего, они выберут очевидный механизм: переключатель компилятора, который задает имя функции для использования в качестве обработчика.
Обратите внимание, что одна из причин сделать определение обработчика статическим, а не определенным во время выполнения, состоит в том, чтобы убедиться, что этот переключатель является компилятором , а не компоновщиком. В конце концов, это тот компилятор, который генерирует любой код проверки концепции. Таким образом, компилятор может просто использовать имя рассматриваемой функции в упомянутом проверочном коде.
Конечно, разные компиляторы могут иметь / будут иметь разные ключи компилятора для определения, какая функция вызывается. Но у них уже есть разные переключатели для генерации отладочной информации, уровней оптимизации и в основном всего остального. Таким образом, какая бы система кроссплатформенного тестирования вы не использовали, она уже будет способна справиться с такими различиями. Обработчик нарушений - это еще один.