0

我正在尝试做这样的事情

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));
    }

当我尝试使用强制显式实例化(外部模板)时,我从 nm 获得以下解组输出:

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

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

4

1 回答 1

0

我认为不允许对成员进行显式初始化/特殊化。但我找不到确切的 c++ 参考。

于 2013-07-21T09:49:37.670 回答