タイプを対応する署名付きに変換するadd_signedMPLクラスのテストをいくつか開発しています。これは次のように定義されます。
template<class T>
struct add_signed {
typedef T type;
};
template<>
struct add_signed<std::uint8_t> {
typedef std::int8_t type;
};
template<>
struct add_signed<std::uint16_t> {
typedef std::int16_t type;
};
template<>
struct add_signed<std::uint32_t> {
typedef std::int32_t type;
};
template<>
struct add_signed<std::uint64_t> {
typedef std::int64_t type;
};
さまざまなタイプでテストしているときに、次のことが真であると評価されることに気付きました。
std::is_same<add_signed<uintptr_t>::type, intptr_t>::value // true
同様に、add_unsigned MPLクラスの場合、次のコードはtrueと評価されます。
std::is_same<add_unsigned<intptr_t>::type, uintptr_t>::value // true
私のコンパイラはMSVC2010です。
したがって、問題は、すべての(正常な)コンパイラでintptr_tに署名するとuintptr_tが生成され、その逆も同様であると想定できますか?