I was checking how big of an array can I create on a X64 application, my understanding was that I can create arrays bigger than 2^31 on X64 process but I\'m getting a compil
This appears to be a defect in the 32-bit cross compiler for x64 targets. The Microsoft Connect link posted by icabod in the comments above addresses this particular issue. Unfortunately the bug's status has been set to Closed - Won't Fix.
The following code snippets will fail to compile using the 32-bit cross compiler for x64:
char* p = new char[(size_t)1 << 32];
and
const size_t sz = (size_t)1 << 32;
char* p = new char[sz];
Both of the above will fail with the error message error C2148: total size of array must not exceed 0x7fffffff bytes when compiled with the 32-bit cross compiler for x64. Unfortunately, Visual Studio does launch the 32-bit compiler even when run on a 64-bit version of Windows, targetting x64.
The following workarounds can be applied:
Changing the code to either of the following:
size_t sz = (size_t)1 << 32; // sz is non-const
char* p = new char[sz];
or
std::vector v( (size_t)1 << 32 );
The bug is still present in Visual Studio 2012, and all workarounds still apply.