以下に示すこれらの関数テンプレートを作成したかったのです。それらの目的はファンクターを比較することですが、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))
、コンパイラが2番目のテンプレートを使おうとすることです。2つ目をコメントアウトすると、boost.bindタイプに特化したものが正しく使用され、すべてが正常に機能します。
使用する正しい関数テンプレートを選択するにはどうすればよいですか?