СФИНА: Компилятор не выбирает специализированный шаблонный класс
у меня есть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