Я пытаюсь сделать что-то вроде этогостанд :: 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));
}
Когда я пытаюсь использовать принудительный явный (шаблоны при создании экземпляра ехЬегпа), я получаю следующее декодированного выхода из нм:
void foo<unsigned long long>(std::make_unsigned<unsigned long long>::type)
Теперь почему std :: make_unsigned :: type испускает тот же тип, как если бы я написал неподписанную Т-экспликацию? Вместо этого я получаю неопределенные ссылки.