我正在为 add_signed MPL 类开发一些测试,该类将类型转换为其签名对应项。定义如下:
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
我的编译器是 MSVC 2010。
所以问题是 - 我们可以假设在所有(理智的)编译器中签署 intptr_t 将产生 uintptr_t 反之亦然?