СФИНА: Компилятор не выбирает специализированный шаблонный класс

у меня естьSFINAE проблема:

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

#include <iostream>
#include <vector>

template<class T, class V = void>
struct Functor {
  void operator()() const {
    std::cerr << "general" << std::endl;
  }
};

template<class T>
struct Functor<T, typename T::Vec> {
  void operator()() const {
    std::cerr << "special" << std::endl;
  }
};

struct Foo {
  typedef std::vector<int> Vec;
};

int main() {
  Functor<Foo> ac;
  ac();
}

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

П.С .: Я использую g ++ 4.4.4

Ответы на вопрос(3)

Ваш ответ на вопрос