typename给出了奇怪的结果 - 在codeblocks中

时间:2011-10-15 16:35:04

标签: c++ gcc c++11

此代码来自main:

Int<> a;
    cout << typeid(Int<>::range_type).name();  

在使用gcc 4.6.1在代码块中编译时给出输出'x'。有什么理由吗?

template<class Int_T>
struct Best_Fit
{//evaluate it lazily ;)
    typedef typename if_<std::is_signed<Int_T>::value,Signed_Type,Unsigned_Type>::type type;
};

template<class Int_T = int, typename Best_Fit<Int_T>::type Min_Range = std::numeric_limits<Int_T>::min(), typename Best_Fit<Int_T>::type Max_Range = std::numeric_limits<Int_T>::max()>
class Int {
    public:
    typedef decltype(Min_Range) range_type;
};

1 个答案:

答案 0 :(得分:5)

您执行的实例化中的

typename Best_Fit<Int_T>::type将产生Signed_Type。由于您没有显示其定义,我们不知道它是什么类型。但c++filt -t x表示它是long long

回想一下,typeid(...).name()可以产生它想要的任何名称。 GNU libstdc ++产生了受损的类型名称。