The template definitions in the C++ standard library
refer to various named requirements whose details are set out in
Tables 20–27.

In these tables, T is an object or reference type to be
supplied by a C++ program instantiating a template;
a,
b, and
c are values of type (possibly const) T;
s and t are modifiable lvalues of type T;
u denotes an identifier;
rv is an rvalue of type T;
and v is an lvalue of type (possibly const) T or an rvalue of
type const T.

In general, a default constructor is not required.

Certain container class
member function signatures specify T() as a default argument.

T() shall be a well-defined expression ([dcl.init]) if one of those
signatures is called using the default argument.

Table 22 — DefaultConstructible requirements

Expression | Post-condition |

T t; | object t is default-initialized |

T u{}; | object u is value-initialized or aggregate-initialized |

T() T{} | an object of type T is value-initialized
or aggregate-initialized |

Table 23 — MoveConstructible requirements

Expression | Post-condition |

T u = rv; | u is equivalent to the value of rv before the construction |

T(rv) | T(rv) is equivalent to the value of rv before the construction |

Table 24 — CopyConstructible requirements (in addition to MoveConstructible)

Expression | Post-condition |

T u = v; | the value of v is unchanged and is equivalent to u |

T(v) | the value of v is unchanged and is equivalent to T(v) |

Table 26 — CopyAssignable requirements (in addition to MoveAssignable)

Expression | Return type | Return value | Post-condition |

t = v | T& | t | t is equivalent to v, the value of v is unchanged |