cpp/utility/move if noexcept

obtains an rvalue reference to its argument if its move constructor does not throw exceptions or if there is no copy constructor (move-only type), otherwise obtains an lvalue reference to its argument. It is typically used to combine move semantics with strong exception guarantee.

Return value
or, depending on exception guarantees.

Complexity
Constant.