2

此代码在 VC11 下为两次检查打印出“unsigned short”,但在 VC10 下第一次检查打印出“int”。我总是希望std::common_type<T,T>::typeT。这是错误还是允许的行为?也许 VC10 的实现和最终的 C++11 标准之间的行为发生了变化?

#include <iostream>
#include <typeinfo>
#include <type_traits>

int main(int argc, const char* argv[])
{
    unsigned short a = 1;
    unsigned short b = 2;
    auto c = true ? a : b;
    std::cout << typeid(std::common_type<unsigned short, unsigned short>::type).name() << std::endl; // VC10: int
    std::cout << typeid(c).name() << std::endl; // VC10: unsigned short
    return 0;
}
4

1 回答 1

3

是的,它是越野车。std::common_type 是 VC10 中的一个 hack,它使用类型提升,以便将sizeof小于的任何sizeof(int)内容提升为int

std::_Ipromo<unsigned short>::_Type _PromoTy0;

_PromoTy0 is an int.
于 2013-09-02T14:28:06.190 回答