Я хотел создать эти шаблоны функций, которые вы видите ниже. Их цель - сравнить функторы, но мне нужно было рассмотреть специальный случай для функторов типа boost.bind.
template<typename R, typename F, typename L>
void compare(boost::_bi::bind_t<R, F, L>& lhs, boost::_bi::bind_t<R, F, L>& rhs)
{
std::cout << lhs.compare(rhs) << std::endl;
}
template<typename T>
void compare(T lhs, T rhs)
{
std::cout << (lhs == rhs) << std::endl;
}
Проблема в том, что когда я делаю compare(boost::bind(func, 1), boost::bind(func, 1))
, компилятор пытается использовать второй шаблон. Если я закомментирую второй, он будет правильно использовать тот, который специализирован для типа boost.bind, и все будет работать нормально.
Как мне выбрать правильный шаблон функции для использования?