We recommend using Visual Studio 2017
This documentation is archived and is not being maintained.

Compiler Warning (level 1) C4312

'operation' : conversion from 'type1' to 'type2' of greater size

This warning detects 64-bit portability issues. You attempted to assign a 32-bit value to a 64-bit type. For example, casting a 32-bit int or 32-bit long to a 64-bit pointer.

This can be an unsafe conversion in some circumstances when sign extension occurs. If a negative number is assigned to a pointer type of a size greater than the int, sign extension will occur and the pointer value will refer to a memory address different from the value of the int.

This warning is only issued when /Wp64 is used. See /Wp64 for more information. Also, see Rules for Using Pointers.

The following code sample generates C4312:

// C4312.cpp
// compile with: /W1 /Wp64 /LD
void* f(int i) {
   return (void*)i;   // C4312

// OK
void* f2(__int64 i) {
   return (void*)i;