The definition you show for non-const real
return an a reference _Tp&
which can be used as an l-value
just fine. I am guessing your version does not return a reference and therefore will not work.
This article Understanding lvalues and rvalues in C and C++ is a great reference on this topic.