C++11

// <utility>
template <class T>
    typename conditional < is_nothrow_move_constructible<T>::value ||
    !is_copy_constructible<T>::value,
    T&&, const T& >::type move_if_noexcept(T& arg) noexcept;

如果移动构造函数(Move constructor)不会抛出异常,则获得右值引用。