Я разрабатываю несколько тестов для добавленного _подписанного класса 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 следующий код оценивается как истинное:
std::is_same<add_unsigned<intptr_t>::type, uintptr_t>::value // true
Мой компилятор — MSVC 2010.
Итак, вопрос -в том, можем ли мы предположить, что во всех (нормальных )компиляторах, подписывающих intptr _t, будет производиться uintptr _t и наоборот?