У меня проблема 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