2014-01-30 36 views
0

嘿everyguys我最近一直在看升壓信號,因爲我想從我自己的自定義代碼切換到處理信號通知。我遇到了一個問題編譯從這裏的第一個例子:http://www.boost.org/doc/libs/1_53_0/doc/html/signals2/tutorial.html,這裏是例如源代碼:鏗鏘聲++不會構建升壓信號的第一個例子2

struct HelloWorld 
{ 
    void operator()() const 
    { 
    std::cout << "Hello, World!" << std::endl; 
    } 
}; 

// Signal with no arguments and a void return value 
boost::signals2::signal<void()> sig; 

// Connect a HelloWorld slot 
HelloWorld hello; 
sig.connect(hello); 

// Call all of the slots 
sig(); 

的問題,從試圖編譯此與出現:++鐺-std = C++ 11 signals2example.cpp這個錯誤是在這裏:

error: no matching function for call to 'get' 
      func(std::get<indices>(args)...); 

爲了縮小我評論了所有的行,直到我想通了其中一個導致它的問題,它的行只是說「SIG();」這個問題似乎與std :: get函數有關,這個函數是用於元組或其他東西的。關於boost :: signal2和clang ++的衝突,網上沒有很多有用的帖子。我還應該注意到,g ++根本沒有任何抱怨地編譯這個文檔。

+0

沒有看到我只能猜到的實際代碼,但我的猜測是,在這個例子中,'indices'名稱是一個變量而不是編譯時常量。模板是僅編譯時構造,因此所有非類型模板參數都必須是編譯時常量。看起來很奇怪,Boost會犯這樣的錯誤。 –

+0

@JoachimPileborg這個圖書館的表演並不是那麼棒;我對質量這麼低的水平並不感到驚訝,我試過這個圖書館一次,我看不出有什麼人以及爲什麼會有人使用這個,所以沒有任何意義。 – user2485710

回答

0

當您使用Clang進行編譯並使用STL時,系統將使用STL(通常爲libstdC++)。它可以是舊版本(你使用OSX?)。 Clang對libC++的C++ 11有完美的支持,嘗試在命令行中添加-stdlib = libC++。 您也可以嘗試使用-v運行gcc和clang,並檢查包含路徑以查看每種情況下使用的stdlib。