Defined in header
Copyable<T> specifies that
T is an
Movable object type that can also copied (that is, it supports copy construction and copy assignment).
| specifies that an object of a type can be moved and swapped |