I haven't had the time to further investigate the fraction between type and value category. For now, I'll just leave here a couple of references (no pun intended):
- Expressions can have reference type
- C++11, type of variable in expression?
- Corresponding discussion on /r/cpp
I guess the key to understand the problem lies in the difference between an identifier and an expression naming that identifier.