I _think_ the call to apply will fail on l-values.

The call to apply is not deduced because the type comes from the struct. The struct type is not completely based on the deduction from eval since references are being removed. This may be the intent, but the call to std::forward on line 26 made me think otherwise.