如果在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)的問題, 我是不是就不能呼叫了?
以上麻煩各位提供一些意見 釐清觀念
謝謝