Why can std::function be constructed with a lambda with a different return type?
问题 The following compiles fine: #include <functional> int main() { std::function<const int&()> f = []() -> int {return 1;}; const int& r = f(); // r is a dangling reference return 0; } How come it's possible to set an std::function with a const int& return type to a lambda with an int return type? Allowing this sort of cast to happen implicitly and with no warning is a gotcha IMHO. 回答1: You can construct a std::function with any object which is callable with the relevant arguments and whose