2013-07-21 1 views
0

Я пытаюсь сделать что-то вроде этогостанд :: make_unsigned коверкания/связь Ошибка

template<class T> 
void foo(typename std::make_unsigned<T>::type x) 
    { 
    //do a lot with x (do not want to repeat for signed vs unsigned) 
    } 

template<class T> 
void foo(T x) 
    { 
    if(x < 0) 
     {x=-x;} 
    foo<typename std::make_unsigned<T>::type> 
     (static_cast<typename std::make_unsigned<T>::type >(x)); 
    } 

Когда я пытаюсь использовать принудительный явный (шаблоны при создании экземпляра ехЬегпа), я получаю следующее декодированного выхода из нм:

void foo<unsigned long long>(std::make_unsigned<unsigned long long>::type) 

Теперь почему std :: make_unsigned :: type испускает тот же тип, как если бы я написал неподписанную Т-экспликацию? Вместо этого я получаю неопределенные ссылки.

ответ

0

Я думаю, что явная инициализация/сексиализация члена не допускается. Но я не смог найти точное C++ refrence.