SFINAE :Компилятор не выбирает специализированный класс шаблона

У меня проблема SFINAE :

В следующем коде я хочу, чтобы компилятор C++ выбрал специализированный функтор и напечатал «специальный», но вместо этого напечатал «общий».

#include 
#include 

template
struct Functor {
  void operator()() const {
    std::cerr << "general" << std::endl;
  }
};

template
struct Functor {
  void operator()() const {
    std::cerr << "special" << std::endl;
  }
};

struct Foo {
  typedef std::vector Vec;
};

int main() {
  Functor ac;
  ac();
}

Как я могу исправить это, чтобы специализированная структура использовалась автоматически? Примечание. Я не хочу напрямую специализировать структуру Functorна Foo, но я хочу специализировать ее на всех типах, имеющих тип Vec.

P.S. :Я использую g++ 4.4.4

8
задан Matthieu M. 8 July 2012 в 17:58
поделиться