GCC 用に作成されたコードを Visual C++ 2012 でコンパイルしています。次の列挙型で列挙値の切り捨てに関する警告がスローされます (値が int の範囲外であるため)。
enum tile_flags {
TILE_FLAG_INNER_FLAME= 0x10000000ULL,
TILE_FLAG_CONSTRICTED= 0x20000000ULL,
TILE_FLAG_MIMIC_INEPT 0x2000000000ULL
TILE_FLAG_MIMIC 0x4000000000ULL
TILE_FLAG_MIMIC_RAVEN 0x6000000000ULL
TILE_FLAG_MIMIC_MASK 0x6000000000ULL
}
x86 用にコンパイルすると、MSVC は 32 ビットに収まるように列挙値を単純に切り捨てているように見えます。ただし、GCC では切り捨ては発生しません。GCC で何が起こっていますか? そして、これをMSVCで機能させるにはどうすればよいですか?