Embarcadero, template member function overload
От: roofhasgone  
Дата: 07.09.12 12:05
Оценка: :))
Код ниже не компилируется на 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;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.