AFAIK, if you cast to non-reference type, you get an prvalue.
int x = 234;
(int)x = 23;
std::cout << x << "\n";
Output : 23 (in msvc)
In GCC and Clang, cstyle cast return a prvalue (as expected), meanwhile in MSVC, it return an lvalue.
Am i missing something or it is an bug in MSVC ?