This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of NAD status.

### 3139. `contract_violation`'s special member functions

Section: 99 [support.contract.cviol] Status: NAD Submitter: Tim Song Opened: 2018-07-10 Last modified: 2019-08-05

Priority: 1

View all other issues in [support.contract.cviol].

View all issues with NAD status.

Discussion:

`contract_violation` is currently defined as:

>     class contract_violation {
>     public:
>       uint_least32_t line_number() const noexcept;
>       string_view file_name() const noexcept;
>       string_view function_name() const noexcept;
>       string_view comment() const noexcept;
>       string_view assertion_level() const noexcept;
>     };

which implies a full set of defaulted special member functions with entirely unclear semantics, and can arguably be read to imply that it is an aggregate.

It seems unlikely that we meant for users to default construct or copy `contract_violation` objects, but if we did want to do that, we need to at least specify the behavior of a default constructed `contract_violation` object and how copying and moving work with respect to the lifetime of the strings referenced by the `string_view`s returned by its member functions.

[2018-11 Reflector prioritization]

Set Priority to 1

[2019 Cologne Wednesday night]

`= delete` for copy/move assignment; Status to 'Open'; Daniel to provide wording

[Post Cologne Mailing]

Contracts were removed from the C++20 draft in Cologne; closing as NAD.

Proposed resolution: