Код ниже не компилируется на Embarcadero C++ Builder XE2.
На MSVS 2010 компилируется и работает как надо.
Вопрос в том, как добиться такой же работы на Embarcadero.
Если за комментировать первое определение Func, то, естественно, работает. Получается, что
это объявление скрывает второе.
#include <type_traits>
void Foo(int x) {
};
class Bar {
public:
template<typename T, typename F>
typename std::enable_if<std::is_class<T>::value,void>::type
Func(T *obj, F func) {
}
template<typename F, typename A>
void Func(F func, A arg) {
}
} bar;
int _tmain(int argc, _TCHAR* argv[])
{
bar.Func(&Foo,10); // [BCC32 Error] E2285 Could not find a match for 'Bar::Func<T,F>(void (*)(int),int)'
return 0;
}