#include <functional>
int main()
{
std::function<const int&()> f = []() -> int {return 1;};
const int& r = f(); // r is a dangling reference
return 0;
}
为什么可以将具有std::function
返回类型的const int&
设置为具有int
返回类型的lambda?恕我直言,允许这种演员表隐式发生而且没有任何警告。
答案 0 :(得分:5)
您可以使用任何可以使用相关参数调用的对象构造std::function
,并且其返回值可以隐式转换为std::function
返回。 <{1}}可隐式转换为int
,因此符合规则。
编译器可以随时警告这一点,但对于一个特别偏角的情况来说似乎需要做很多工作。