Requires a type to have a user defined or compiler generated copy constructor or be of a basic type. A compiler can generate a copy constructor if the class has no suppressed copy constructor and no member variables of a move-only type.