【发布时间】:2018-07-03 01:55:12
【问题描述】:
Support for contract based programming in C++ 在 Rapperswil 的 C++20 工作草案中被采用。该语言功能的一部分是违反处理程序的概念,当违反合同时将调用该处理程序。
您可以安装自己的违规处理程序并发布发布版本,并可选择在运行时启用强制执行。
但是本文添加的[dcl.attr.contract] 中的措辞是:
程序的违规处理程序是“
noexceptopt 类型的函数 (lvalue reference toconst std::contract_violation) 的函数返回void”,并以实现定义的方式指定。 [...]不应该有设置或修改违规处理程序的编程方式。它是由实现定义的,如何为程序建立违规处理程序以及如何设置std::contract_violation([support.contract.cviol]) 参数值,除非下面指定。
这对我来说很不清楚。一个实现如何允许我以非编程方式设置我自己的违规处理程序?我必须在 gcc、clang 和 msvc 上做什么?
【问题讨论】: