2012-02-11 39 views
1

我有一個簡單的叫做內部異步的lambda。但它提供了一個system_error。如何使用不返回任何東西的lambda表達式的異步?

#include<future> 
#include<iostream> 

int main() 
{ 
    auto a = std::async([]() 
    { 
     std::cout << 42 << std::endl; 
    }); 
    a.get(); 
    return 0; 
} 

http://ideone.com/GIyGI

編譯器:C++ 0X(GCC-4.5.1)

任何想法?

+0

這看起來像是GCC 4.5中的一個bug。您的代碼是有效的AFAICT並與叮噹(中繼)一起使用。 – bames53 2012-02-11 05:38:09

+0

我也嘗試了GCC 4.6.1。同樣的錯誤。當我用-pthread編譯時,它工作正常。 – balki 2012-02-11 06:40:13

+0

@ bames53鏗鏘樹幹可以codegen lambdas? – 2012-02-11 14:18:38

回答

2

很可能,您需要使用-pthread選項進行編譯。

+0

是的。它使用-pthread選項運行良好,但爲什麼它是這樣的?這是記錄在某處嗎? – balki 2012-02-11 06:40:35

+0

這是「有點」記錄。例如,請參閱http://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/manual/manual/using_concurrency.html(因爲這是文檔),它討論了它是如何依賴於平臺的,以及記錄不完善。 – wjl 2012-02-13 00:48:43