在 Rapperswil 的 C++20 工作草案中采用了对 C++ 中基于合约的编程的支持 。该语言功能的一部分是违反处理程序的概念,当违反合同时将调用该处理程序。
您可以安装自己的违规处理程序并发布发布版本,并选择在运行时启用强制执行。
但是本文添加的[dcl.attr.contract]中的措辞说:
程序的违规处理程序是“<code>noexcept opt function of (lvalue reference to
const std::contract_violation
) 返回void
”类型的函数,并以实现定义的方式指定。[...]不应该有设置或修改违规处理程序的编程方式。它是由实现定义的,如何为程序建立违规处理程序以及如何设置std::contract_violation
([support.contract.cviol]) 参数值,除非下面指定。
这对我来说很不清楚。一个实现如何允许我以非编程方式设置我自己的违规处理程序?我必须在 gcc、clang 和 msvc 上做什么?