Issue
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.
Solution
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.
Answered By - Bathsheba Answer Checked By - Terry (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.