Move semantics
Using std::move to reduce complexity from O(n) to O(1)
Move constructor
Move assignment
Re-use a moved object
Using move semantics on containers