Почему не компилируется следующий код (в режиме С++ 11)?
#include <vector>
template<typename From, typename To>
void qux(const std::vector<From>&, To (&)(const From&)) { }
struct T { };
void foo(const std::vector<T>& ts) {
qux(ts, [](const T&) { return 42; });
}
Сообщение об ошибке:
prog.cc:9:5: error: no matching function for call to 'qux'
qux(ts, [](const T&) { return 42; });
^~~
prog.cc:4:6: note: candidate template ignored: could not match 'To (const From &)' against '(lambda at prog.cc:9:13)'
void qux(const std::vector<From>&, To (&)(const From&)) { }
^
Но это не объясняет, почему он не может соответствовать параметру.
Если я создаю qux
функцию без шаблона, заменив From
на T
и To
на int
, она компилируется.