typename дает странный результат - в кодовых блоках - PullRequest
1 голос
/ 15 октября 2011

Этот код от основного:

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

выдает 'x' при компиляции в кодовых блоках с помощью gcc 4.6.1. Есть причина для этого?

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 Ответ

5 голосов
/ 15 октября 2011

typename Best_Fit<Int_T>::type в инстанции, которую вы делаете, даст Signed_Type.Поскольку вы не показываете его определение, мы понятия не имеем, что это за тип.Но c++filt -t x говорит, что это long long.

Напомним, что typeid(...).name() может дать любое имя, какое захочет.GNU libstdc ++ выдает искаженное имя типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...