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; }; ```

Original source