My snippet:
auto i = -2147483648;
int j = 3;
std::swap(i, j); // Compile error about mismatched types here.
The compiler states that the l
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.