TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)

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 數不夠而不會修正(默).

沒有留言:

張貼留言