C++ Value Categories and Forwarding

Value categories describe expression identity and lifetime. Forwarding references and std::forward let generic wrappers preserve whether an argument was an lvalue or rvalue when passing it onward.