你是回他还是回我?ChatGPT的第三个方案居然可行
Doit([tt=std::ref(t)]()->Test { return std::move(tt.get()); }); // 可以编译
如果不用的话,只是加上lambda返回类型,还是不行
Doit([tt=std::move(t)]()->Test { return tt; }); // 无法编译
另外, Doit([tt=std::move(t)]()->Test { Test t1(tt); return t1; }); // 无法编译
但是应该是因为copy elision还是需要拷贝构造的定义,虽然不用。C++23说是可以取消这个要求了。
【 在 ziqin 的大作中提到: 】
: 有这么复杂么?明明是你自己写lambda习惯不好
: 你自己不写lambda的返回类型,系统识别出来,capture by move的lambda返回的是Test,default capture的lambda返回的是Test&
: 都是最基本的东西,搞得这么复杂。
: ...................
--
FROM 72.199.121.*