2012-12-28 124 views
5

我正在試驗proto和phoenix,我的第一個玩具例子之一是什麼,我不知道我應該在哪裏看。由於#boost IRC頻道上的某個人告訴我要確保首先深度複製了phoenix表達式樹(以便在構建x時沒有懸空的引用),我用boost::proto::deep_copy包裝了表達式。但是that didn't quite work。編譯時使用-O2標誌和works fine when omitting it時仍然崩潰。爲什麼這個proto /鳳凰玩具的例子會崩潰?

#include <boost/phoenix/phoenix.hpp> 
#include <boost/proto/deep_copy.hpp> 
#include <iostream> 

namespace bpr = boost::proto; 

int main(int argc, char **argv) { 
    using namespace boost::phoenix; 
    using namespace placeholders; 

    auto x = bpr::deep_copy(
    switch_(arg1)[ 
     case_<1>(std::cout << val("hello")), 
     case_<2>(std::cout << val("bye")), 
     default_(std::cout << val("default")) 
    ]); 

    x(1); 
    x(2); 
} 

我預計這會輸出hellobye

+0

@llonesmiz看到http://liveworkspace.org/code/3Rdg5D$0。沒有輸出 –

+0

從那時起,liveworkspace升級到版本1.53,現在你的代碼可以按預期工作了。我相信這個問題在1.52解決了。 – 2013-02-19 16:48:54

回答

2

看起來這是一個已知的bug in Phoenix。我會避免使用phoenix::switch_,直到這是排序。不幸的是,這些天菲尼克斯的維護者似乎正在忙於其他事情。 :-(