如果在C++ 11 lambda想要move capture 似乎只能用一些手脚
于是我就好奇的做了一些测试
http://ideone.com/99S4Qx
大概分成三个问题(如code所列)
1. 这个最单纯, 一般认知std bind回传的物件可以用 std::function来接
但我这样写 怎么样都接不起来 似乎只能用auto让他自己判断, 为什么呢?
2. 用了auto来写 接了以后想要invoke看看, 谁知道遇到怪事
(a) lambda参数写 const unique_ptr<int>& uptr2 后 就可以呼叫func2(这勉强可以接受)
(b) 参数写 unique_ptr<int>& uptr2 竟然可以吃 std::move的rvalue ref
(这感觉内部实做还是by lvalue传递, 但又没有std::rref 整个有点怪)
(c) 写 unique_ptr<int>&& uptr2 或是 unique_ptr<int> uptr2 只要写了func2() 就会
compile error...这我就不知道为什么了
3. 也就是上面(c)的问题, 我是不是就不能呼叫了?
以上麻烦各位提供一些意见 厘清观念
谢谢