C++ named requirements: CopyConstructible
From cppreference.com
                    
                                        
                    
                    
                                                            
                    Specifies that an instance of the type can be copy-constructed from an lvalue expression.
Requirements
The type T satisfies CopyConstructible if
-  The type 
Tsatisfies MoveConstructible, and 
Given
-  
v, an lvalue expression of typeTorconst Tor an rvalue expression of typeconst T -  
u, an arbitrary identifier 
The following expressions must be valid and have their specified effects
| Expression | Post-conditions | 
|---|---|
| T u = v; |  The value of u is equivalent to the value of v.
The value of   | 
| T(v) |  The value of T(v) is equivalent to the value of v.
The value of   | 
| 
 The expression v.~T() also must be valid, and, for lvalue   | 
(until C++11) | 
Notes
Until C++11, classes that overloaded operator& were not CopyConstructible and thus weren't usable in the standard library containers. As of C++11, the standard library uses std::addressof whenever the address of an object is needed.
See also
|    (C++11)(C++11)(C++11)  | 
   checks if a type has a copy constructor   (class template)  |