Вероятно, компилятор пытается оптимизировать, так как ваше значение ARRSIZE является константой. И тогда он достигает своего собственного статического предела инициализации. Вы могли бы просто вынуть ключевое слово «const», и оно будет работать.
Если нет, возможно, что-то вроде этого.
extern size_t GetArraySize();
int main()
{
size_t allocationsize = GetArraySize();
char *cp = new char[allocationsize];
return 0;
}
size_t GetArraySize()
{
// compile time assert to validate that size_t can hold a 64-bit value
char compile_time_assert_64_bit[(sizeof(size_t) == 8)?1:-1];
size_t allocsize = 0x100000000UL; // 64-bit literal
return allocsize;
}