[concept.copyconstructible] (original) (raw)
18 Concepts library [concepts]
18.4 Language-related concepts [concepts.lang]
18.4.14 Concept copy_constructible [concept.copyconstructible]
template<class T> concept [copy_constructible](#concept:copy%5Fconstructible "18.4.14 Concept copy_constructible [concept.copyconstructible]") = move_constructible<T> && constructible_from<T, T&> && [convertible_to](concept.convertible#concept:convertible%5Fto "18.4.4 Concept convertible_to [concept.convertible]")<T&, T> && constructible_from<T, const T&> && [convertible_to](concept.convertible#concept:convertible%5Fto "18.4.4 Concept convertible_to [concept.convertible]")<const T&, T> && constructible_from<T, const T> && [convertible_to](concept.convertible#concept:convertible%5Fto "18.4.4 Concept convertible_to [concept.convertible]")<const T, T>;
If T is an object type, then let v be an lvalue of type (possibly const) T or an rvalue of type const T.
T models copy_constructible only if
- (1.1)
After the definition T u = v;,u is equal to v ([concepts.equality]) andv is not modified. - (1.2)
T(v) is equal to v and does not modify v.