You are correct, I messed up in that example. The original line of code you wrote does work as-is. I thought l-values would bind to a ```&&``` as part of the template argument deduction process. I didn't think the expression ```eval_impl<int&>::apply(int_value_)``` would accept l-values since apply is not templated, and no deduction would be done. This case would fall under reference collapsing, and the behavior is definitely correct. Some of the resources discussing universal references focus on the deduction part, and mention reference collapsing tangentially. Examples are usually with a templated function, not with a templated class and a non-template member function. I've found some good resources on this subject, but I might have to go RTFM, and get it straight from the source.

R-values seem to have amplified the difficulty of writing _correct_ generic code.