Typename给出了奇怪的输入结果代码块

typename gives strange result - in codeblocks

本文关键字:输入 结果 代码 Typename      更新时间:2023-10-16

这段代码来自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;
};

typename Best_Fit<Int_T>::type在实例化中将生成Signed_Type。因为你没有给出它的定义,所以我们不知道它是什么类型。但是c++filt -t x说它是long long

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

相关文章: