20 Library introduction [library]

20.5 Library-wide requirements [requirements]

20.5.3 Requirements on types and expressions [utility.requirements]

20.5.3.3 NullablePointer requirements [nullablepointer.requirements]

NullablePointer Типа является указателем типа типа , который поддерживает нулевые значения. Тип P соответствует требованиям, NullablePointer если:

  • P удовлетворяет требованиям EqualityComparable, DefaultConstructible, CopyConstructible, CopyAssignable, и Destructible,

  • lvalues типа P являются swappable,

  • выражения, показанные в таблице 28 , действительны и имеют указанную семантику, и

  • P удовлетворяет всем остальным требованиям данного подпункта.

Объект типа, инициализированный значением, P создает нулевое значение типа. Нулевое значение должно быть эквивалентно только самому себе. Инициализированный по умолчанию объект типа P может иметь неопределенное значение. [ Note: Операции с неопределенными значениями могут вызывать неопределенное поведение. ] end note

Объект p типа P может быть contextually converted to bool. Эффект должен быть таким, как если бы p != nullptr он был оценен вместо p.

Никакая операция, которая является частью NullablePointer требований, не должна завершаться через исключение.

В таблице 28, u обозначает идентификатор, t обозначает не-const объекта типа P, a и b обозначают значение типа (возможно const) P, и np обозначает значение типа (возможно const) std​::​nullptr_­t.

Таблица 28 - NullablePointer требования
Выражение Тип возврата Операционная семантика
P u(np);
Postconditions: u == nullptr
P u = np;
P(np) Postconditions: P(np) == nullptr
t = np P& Postconditions: t == nullptr
a != b контекстно конвертируемый в bool !(a == b)
a == np контекстно конвертируемый в bool a == P()
np == a
a != np контекстно конвертируемый в bool !(a == np)
np != a