SFINAE: Kompilator nie wybiera specjalnej klasy szablonów

mamSFINAE problem:

W poniższym kodzie chcę, aby kompilator C ++ wybrał specjalistyczny funktor i wypisał „special”, ale zamiast tego drukuje „general”.

#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();
}

Jak mogę to naprawić, aby wyspecjalizowana struktura była używana automatycznie? Uwaga Nie chcę bezpośrednio specjalizowaćFunctor struct onFoo, ale chcę ją specjalizować na wszystkich typach, które mająVec rodzaj.

P.S: Używam g ++ 4.4.4

questionAnswers(3)

yourAnswerToTheQuestion