Say У меня есть эта функция:Преобразование функтора объект типа функции
template <typename T>
void foo(function<T(const T&, const T&)> op, const T& lhs, const T& rhs) {
cout << op(lhs, rhs) << endl;
}
Это legal code:
function<int(const int&, const int&)> op = plus<int>();
foo(op, 13, 42);
Но когда я делаю это:
foo(plus<int>(), 13, 42)
I получить ошибку:
No matching function for call to
foo(std::plus<int>, int, int)
Почему я могу инициализировать объект типа function<int(const int&, const int&)>
от plus<int>()
, но я не могу передать plus<int>()
в параметр типа function<T(const T&, const T&)>
? Это что-то связано с шаблоном?
Неявные преобразования типов не работают при выводе аргумента шаблона. – Arunmu
@Arunmu Я думаю, что есть исключения из этого правила: [example] (http://melpon.org/wandbox/permlink/ld8NyDotgjK7B7WT) –
@Arunmu Это ответ, потому что он работает, если я удаляю шаблон: http: // ideone.com/bfjy3p Итак, как мне узнать, что преобразование между 'plus()' и 'function ' неявно? –