Exercise 13.45:
Functions that return lvalue references, along with the assignment, subscript, deference, and prefix increment/decrement operators, are all examples of expressions that return lvalue. We can bind an lvalue reference to the result of any of these expressions.
Functions that return a nonreference type, along with the arithmetic, relational, bitwise, and postfix increment/decrement operators, all yield rvalues. We cannot bind an lvalue to these expressions, but we can bind either an lvalue reference to const or an rvalue reference to such expressions.
Exercise 13.46
(1) rvalue reference; (2) lvalue reference
(3) lvalue reference; (4) rvalue reference
Reasons is seen in answer to Exercise 13.45.