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

A type P meets the *Cpp17NullablePointer* requirements if:

- P meets the
*Cpp17EqualityComparable*,*Cpp17DefaultConstructible*,*Cpp17CopyConstructible*,*Cpp17CopyAssignable*, and*Cpp17Destructible*requirements, - lvalues of type P are swappable,
- the expressions shown in Table 35 are valid and have the indicated semantics, and
- P meets all the other requirements of this subclause.

Table 35: *Cpp17NullablePointer* 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 | contextually convertible to bool | !(a == b) | |

a == np | contextually convertible to bool | a == P() | |

np == a | |||

a != np | contextually convertible to bool | !(a == np) | |

np != a |