std::enable_if : параметр vs параметр шаблона

Я создаю некоторую программу проверки ввода, которая должна иметь специальные функции для целых и/или двойных чисел (например, '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()’

Я не могу понять, что не так во второй версии.

31
задан Loïc Février 15 June 2012 в 18:01
поделиться