7 Concepts library [concepts.lib]

7.3 Core language concepts [concepts.lib.corelang]

7.3.16 Concept CopyConstructible [concepts.lib.corelang.copyconstructible]

template <class T> concept bool CopyConstructible = MoveConstructible<T> && Constructible<T, T&> && ConvertibleTo<T&, T> && Constructible<T, const T&> && ConvertibleTo<const T&, T> && Constructible<T, const T> && ConvertibleTo<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. CopyConstructible<T> is satisfied only if

  • After the definition T u = v;, u is equal to v.

  • T{v} is equal to v.