其實這是早已踩過的 bug, 單純留著當紀錄.
int i = 0; ( [&i]() { // capture once ++i; ( [&i]() { // capture twice ++i; } )(); } )(); std::cout << i << std::endl; // 2
來猜猜看上述程式用哪個 compiler 會出錯?
好吧, 應該不用猜也知道, 又是 Visual C++. 因為不明的原因[?], 它的 lambda expression 不能巢狀地 capture 變數名稱, 要用 std::bind 繞過去, 但因為前述的 bug, 這會讓程式碼變得又臭又長, 失去原本用 lambda expression 的意義.
據說這個 bug 也因為 vote 數不夠而不會修正(默).
沒有留言:
張貼留言