此代码在 VC11 下为两次检查打印出“unsigned short”,但在 VC10 下第一次检查打印出“int”。我总是希望std::common_type<T,T>::type
是T
。这是错误还是允许的行为?也许 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;
}