T240104 Failed to Passing a Lambda Expression to std::function
这是昨天群里的一个问题,但我想谈的是背后的本质问题。
这个问题其实可以简化为:
template <typename ...Args>
void foo(std::function<bool(Args...)>) { }
int main() {
// error: no matching function for call to 'foo(main()::<lambda(int)>)'
foo([](int) { return true; });
}
本质原因在 TAD(模板参数推导),这里实参 A = closure type,形参 P = std::function<bool(Args...)>。由于类型完全不同,P 无法替换成 A,这里 TAD 完全不可能推断出… Continue Reading