My snippet:
auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here.
The compiler states that the literal i
is a long long
. Why is that? -2147483648 fits in an int
on MSVC x64.
My compiler is MSVC, target is 64 bits.
Contrary to popular belief, -2147483648 is not a literal: C++ does not support negative literal values.
It is, in fact, a compile-time evaluable constant expression consisting of a unary negation of the literal 2147483648.
On MSVC x64, which has 32 bit int
s and long
s, 2147483648 is too big for either of those so it fails over to the long long
type that you observe.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With