2011年2月24日 星期四

Nested capturing in lambda expression

其實這是早已踩過的 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 數不夠而不會修正(默).

沒有留言:

張貼留言