2012-12-28 9 views
5

मैं प्रोटो और फीनिक्स के साथ प्रयोग कर रहा हूं और मेरे पहले खिलौने उदाहरण दुर्घटनाओं में से एक क्या है और मुझे नहीं पता कि मुझे कहां देखना चाहिए। चूंकि #boost आईआरसी चैनल पर किसी ने मुझे यह सुनिश्चित करने के लिए कहा कि फीनिक्स अभिव्यक्ति वृक्ष पहली गहरी प्रतिलिपि बनाई गई है (ताकि x का निर्माण किया गया हो, तो कोई हानिकारक संदर्भ नहीं छोड़े गए हैं), मैंने boost::proto::deep_copy द्वारा अभिव्यक्ति को लपेट लिया। हालांकि that didn't quite work-O2 ध्वज, और works fine when omitting it के साथ संकलित होने पर यह अभी भी क्रैश हो जाता है।यह प्रोटो/फीनिक्स खिलौना उदाहरण क्यों दुर्घटनाग्रस्त है?

#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

तब से, लाइववर्क स्पेस संस्करण 1.53 में अद्यतन को बढ़ावा देता है, अब आपका कोड अपेक्षित काम करता है। मुझे विश्वास है 1.52 में हल किया गया था। –

उत्तर

2

ऐसा लगता है कि यह एक ज्ञात bug in Phoenix है। मैं phoenix::switch_ का उपयोग करके इसे हल करने से बचूंगा। दुर्भाग्यवश, फीनिक्स का रखरखाव इन दिनों अन्य चीजों के साथ व्यस्त प्रतीत होता है। :-(

संबंधित मुद्दे