C++ std::make_无符号损坏/链接错误

C++ std::make_无符号损坏/链接错误,c++,template-specialization,typetraits,C++,Template Specialization,Typetraits,我正试着做这样的事情 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;}

我正试着做这样的事情

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(typename std::make_unsigned::type x)
{
//对x进行大量操作(不希望对有符号与无符号重复)
}
模板
void foo(T x)
{
if(x<0)
{x=-x;}
福
(静态_-cast(x));
}
当我尝试使用强制显式实例化(extern模板)时,我从nm获得以下demangled输出:

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

现在,为什么std::make_unsigned::type不发出与我显式编写unsigned T相同的类型?相反,我得到的是未定义的引用。

我认为不允许对成员进行显式初始化/secialization。 但是我找不到精确的C++折射率。