[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.2 Evaluation"))[.](#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.1 Character 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.2 Evaluation")); 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)