为什么下面的代码不能编译(在C++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
成为一个非模板函数,用T
替换From
,用int
替换To
,它就会编译。
https://stackoverflow.com/questions/41920890
复制相似问题