Why does an lvalue cast work?
assign, c++, casting, lvalue, visual-studio-2010
Solution
It shouldn't work. An explicit type conversion to `float` with cast notation will be a prvalue (§5.4):
The result of the expression `(T)` cast-expression is of type `T`. The result is an lvalue if T is an lvalue reference type or an rvalue reference to function type and an xvalue if T is an rvalue reference to object type; otherwise the result is a prvalue.
My emphasis added.
The assignment operator requires an lvalue as its left operand (§5.17):
All require a modifiable lvalue as their left operand and return an lvalue referring to the left operand.
A prvalue is not an lvalue.
Problem
I saw this kind of cast for the first time today, and I'm curious as to why this works. I thought casting in this manner would assign to the temporary, and not the class member. Using VC2010. ``` class A { public: A() : m_value(1.f) { ((float)m_value) = 10.f; } const float m_value; }; ```