Является ли intptr _t подписанным аналогом uintptr _t (и наоборот )?

Я разрабатываю несколько тестов для добавленного _подписанного класса 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 и наоборот?

10
задан Bartłomiej Siwek 1 May 2012 в 13:24
поделиться