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