Я создаю некоторую программу проверки ввода, которая должна иметь специальные функции для целых и/или двойных чисел (например, 'isPrime' должна быть доступна только для целых чисел).
Если я использую enable_if
в качестве параметра, он работает отлично:
template
class check
{
public:
template< class U = T>
inline static U readVal(typename std::enable_if::value >::type* = 0)
{
return BuffCheck.getInt();
}
template< class U = T>
inline static U readVal(typename std::enable_if::value >::type* = 0)
{
return BuffCheck.getDouble();
}
};
но если я использую его в качестве параметра шаблона (как показано на http://en.cppreference .com/w/cpp/types/enable_if)
template
class check
{
public:
template< class U = T, class = typename std::enable_if::value>::type >
inline static U readVal()
{
return BuffCheck.getInt();
}
template< class U = T, class = typename std::enable_if::value>::type >
inline static U readVal()
{
return BuffCheck.getDouble();
}
};
то у меня следующая ошибка:
error: ‘template template static U check::readVal()’ cannot be overloaded
error: with ‘template template static U check::readVal()’
Я не могу понять, что не так во второй версии.