私はこのようなことをしようとしています
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 を明示的に記述した場合と同じ型を出力しないのでしょうか? 代わりに、未定義の参照を取得します。