template<typename A, typename B> auto min(A&& aref, B&& bref) {// for example, if you pass a const std::string& as first argument,// then A becomes const std::string& and by extension, aref becomes// const std::string&, completely maintaining it's type information.if (std::forward<A>(aref) < std::forward<B>(bref))return std::forward<A>(aref);elsereturn std::forward<B>(bref);}