We recommend using Visual Studio 2017

Compiler Warning (level 4) C4238


The latest version of this topic can be found at Compiler Warning (level 4) C4238.

nonstandard extension used : class rvalue used as lvalue

For compatibility with previous versions of Visual C++, Microsoft extensions (/Ze) allow you to use a class type as an rvalue in a context that implicitly or explicitly takes its address. In some cases, such as the example below, this can be dangerous.

// C4238.cpp  
// compile with: /W4 /c  
struct C {  
   C() {}  
C * pC = &C();   // C4238  

This usage causes an error under ANSI compatibility (/Za).