这段代码来自main:
Int<> a;
cout << typeid(Int<>::range_type).name();
Run Code Online (Sandbox Code Playgroud)
在使用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;
};
Run Code Online (Sandbox Code Playgroud)
typename Best_Fit<Int_T>::type在实例化中,你会产生Signed_Type.由于您没有显示其定义,我们不知道它是什么类型.但c++filt -t x它说是的long long.
回想一下,它typeid(...).name()可以产生它想要的任何名称.GNU libstdc ++产生损坏的类型名称.
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |