Files
cppdraft_translate/cppdraft/support/contract/violation.md
2025-10-25 03:02:53 +03:00

153 lines
4.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[support.contract.violation]
# 17 Language support library [[support]](./#support)
## 17.10 Contract-violation handling [[support.contract]](support.contract#violation)
### 17.10.3 Class contract_violation [support.contract.violation]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4491)
The class contract_violation defines the type of objects used to represent
a contract violation that has been detected
during the evaluation of a contract assertion
with a particular evaluation semantic ([[basic.contract.eval]](basic.contract.eval "6.11.2Evaluation"))[.](#1.sentence-1)
Objects of this type can
be created only by the implementation[.](#1.sentence-2)
It isimplementation-defined
whether the destructor is virtual[.](#1.sentence-3)
[🔗](#itemdecl:1)
`const char* comment() const noexcept;
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4509)
*Returns*: Animplementation-definedntmbs in
the ordinary literal encoding ([[lex.charset]](lex.charset "5.3.1Character sets"))[.](#2.sentence-1)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4516)
*Recommended practice*: The string returned
should contain a textual representation
of the predicate of the violated contract assertion
or an empty string if
storing a textual representation is undesired[.](#3.sentence-1)
[*Note [1](#note-1)*:
The string can represent a
truncated, reformatted, or summarized rendering of the
predicate, before or after preprocessing[.](#3.sentence-2)
— *end note*]
[🔗](#itemdecl:2)
`contracts::detection_mode detection_mode() const noexcept;
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4536)
*Returns*: The enumerator value
corresponding to
the manner in which the contract violation was identified[.](#4.sentence-1)
[🔗](#itemdecl:3)
`exception_ptr evaluation_exception() const noexcept;
`
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4550)
*Returns*: If the contract violation occurred
because the evaluation of the predicate exited via an exception,
an exception_ptr object that refers to
that exception or a copy of that exception;
otherwise, a null exception_ptr object[.](#5.sentence-1)
[🔗](#itemdecl:4)
`bool is_terminating() const noexcept;
`
[6](#6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4566)
*Returns*: true if the evaluation semantic is
a terminating semantic ([[basic.contract.eval]](basic.contract.eval "6.11.2Evaluation"));
otherwise, false[.](#6.sentence-1)
[🔗](#itemdecl:5)
`assertion_kind kind() const noexcept;
`
[7](#7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4579)
*Returns*: The enumerator value
corresponding to
the syntactic form of the violated contract assertion[.](#7.sentence-1)
[🔗](#itemdecl:6)
`source_location location() const noexcept;
`
[8](#8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4592)
*Returns*: A source_location object
withimplementation-defined
value[.](#8.sentence-1)
[9](#9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4599)
*Recommended practice*: The value returned should be
a default constructed source_location object
or a value identifying the violated contract assertion:
- [(9.1)](#9.1)
When possible,
if the violated contract assertion was a precondition,
the source location of the function invocation should be returned[.](#9.1.sentence-1)
- [(9.2)](#9.2)
Otherwise,
the source location of the contract assertion should be returned[.](#9.2.sentence-1)
[🔗](#itemdecl:7)
`evaluation_semantic semantic() const noexcept;
`
[10](#10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L4622)
*Returns*: The enumerator value
corresponding to
the evaluation semantic with which
the violated contract assertion was evaluated[.](#10.sentence-1)