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

強制的な明示的なインスタンス化 (extern テンプレート) を使用しようとすると、nm から次のデマングリングされた出力が得られます。

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

では、なぜ std::make_unsigned::type は unsigned T を明示的に記述した場合と同じ型を出力しないのでしょうか? 代わりに、未定義の参照を取得します。

4

1 に答える 1