2013-07-21 30 views
0

我試圖做這樣的事情的std :: 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)); 
    } 

當我嘗試使用強制明確instanciation(EXTERN模板),我從納米demangled輸出如下:

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

現在,爲什麼不std :: make_unsigned :: type發出相同的類型,就好像我寫了unsigned T explicity?相反,我得到未定義的參考。

回答

0

我認爲成員的顯式初始化/ secialization是不允許的。 但我無法找到確切的C++參考。