Overloadng the reference qualifiers =================================== We can overload on left- or value-ness of parameters T & value(optional<T> & par_); T && value(optional<T> && par_); T const& value(optional<T> const& par_); But in object-oriented programming, sometimes we want to overload on the this parameter too. template <typename T> class optional { // ... T& value() &; T&& value() &&; T const& value() const&; };