Я хотел бы предоставить различные реализации функции в зависимости от того, является ли она указателем, ссылкой или обычным типом.Это мой код:
template<class T,
class = typename std::enable_if_t<std::is_reference<T>::value>>
void f(T && in)
{}
// This causes redefinition error
template<class T,
class = typename std::enable_if_t<std::is_pointer<T>::value>>
void f(T && in)
{}
template<class T,
class = typename std::enable_if_t<!std::is_reference<T>::value>,
class = typename std::enable_if_t<!std::is_pointer<T>::value>>
void f(T && in)
{}
Средняя функция вызывает:
12: 13: ошибка: переопределение 'template void f (T &&)'
7: 13: примечание: здесь ранее объявлено 'template void f (T &&)'
К счастью, только первая и последняя функции вместе скомпилированы.
Любые идеи, как это исправитьили упростите этот код.