std::forward ( std::remove_reference) , lvalue rvalue . const, ( ) T (.. const T&, const rvalue, T&& , rvalue).
A rvalue; , , std::forward lvalue rvalue; , std::forward<int&>(42); . std::forward std::forward<T>, T - T&&, reference. , .
std::forward " ", Going Native 2013. , std::forward ( 20- );
template <typename T>
T&& forward(T&& param) { // T&& here is formulated to disallow type deduction
if (is_lvalue_reference<T>::value) {
return param; // return type T&& collapses to T& in this case
}
else {
return move(param); // return type is T&&
}
}
std::forward lvalue, lvalue rvalue ( std::move), rvalue.
TL; DR ? ; std::forward (, , , / ..).