[nullablepointer.requirements]

16 Library introduction [library]

16.4 Library-wide requirements [requirements]

16.4.4 Requirements on types and expressions [utility.requirements]

16.4.4.4 Cpp17NullablePointer requirements [nullablepointer.requirements]

A Cpp17NullablePointer type is a pointer-like type that supports null values.

A value-initialized object of type P produces the null value of the type.

The null value shall be equivalent only to itself.

A default-initialized object of type P may have an indeterminate or erroneous value.

[Note 1:

Operations involving indeterminate values can cause undefined behavior, and operations involving erroneous values can cause erroneous behavior ([basic.indet]).

— end note]

The effect shall be as if p != nullptr had been evaluated in place of p.

No operation which is part of the Cpp17NullablePointer requirements shall exit via an exception.

In Table 36, u denotes an identifier, t denotes a non-const lvalue of type P, a and b denote values of type (possibly const) P, and np denotes a value of type (possibly const) std​::​nullptr_t.

Table 36Cpp17NullablePointer requirements [tab:cpp17.nullablepointer]

Expression

Return type

Operational semantics

P u(np);

Postconditions: u == nullptr

P u = np;

P(np)

Postconditions: P(np) == nullptr

t = np

P&

Postconditions: t == nullptr

a != b

decltype(a != b) models boolean-testable

!(a == b)

a == np

decltype(a == np) and decltype(np == a) each model boolean-testable

a == P()

np == a

a != np

decltype(a != np) and decltype(np != a) each model boolean-testable

!(a == np)

np != a