Я озадачен различием в поведении между MSVC и clang для этого кода:
#include <iostream>
#include <cstdint>
int main() {
int64_t wat = -2147483648;
std::cout << "0x" << std::hex << wat << std::endl;
return 0;
}
Visual Studio 2010, 2012 и 2013 (в Windows 7) отображаются все:
0x80000000
Но clang 503.0.40 (на OSX) отображает:
0xffffffff80000000
Какое правильное поведение соответствует стандарту С++? Должен ли литерал быть расширен с нулевым или расширенным значком до 64 бит?
Я знаю, что int64_t wat = -2147483648LL;
приведет к такому же результату для обоих компиляторов, но я задаюсь вопросом о правильном поведении без литерального суффикса.