2012-12-28 10 views
5

Eksperymentuję z proto i feniksem i co jest jednym z moich pierwszych przykładów zabawek i nie mam pojęcia, gdzie powinienem patrzeć. Ponieważ ktoś na kanale IRC#boost powiedział mi, żebym upewnił się, że drzewo ekspresji feniksa jest najpierw głęboko skopiowane (tak, że nie ma żadnych zwisających odnośników, które zostały skonstruowane po zbudowaniu x), zawinąłem wyrażenie przez boost::proto::deep_copy. Jednak that didn't quite work. Nadal ulega awarii po skompilowaniu flagą -O2 i works fine when omitting it.Dlaczego ten przykład zabawki z proto/feniks rozbił się?

#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); 
} 

Oczekuję, że na wyjściu hellobye.

+0

@llonesmiz zobacz http://liveworkspace.org/code/3Rdg5D$0 .nie ma wyjścia. –

+0

Od tego czasu liveworkspace ma aktualizację do wersji 1.53, teraz twój kod działa zgodnie z oczekiwaniami. zostało rozwiązane w 1.52. –

Odpowiedz

2

Wygląda na to, że jest to znany bug in Phoenix. Unikałbym używania phoenix::switch_, dopóki nie zostanie posortowany. Niestety, opiekun Phoenixa wydaje się być ostatnio zajęty innymi rzeczami. :-(

Powiązane problemy