2012-12-28 6 views
5

Sto sperimentando con proto e fenice e quale è uno dei miei primi esempi di giochi in crash e non ho idea di dove dovrei guardare. Dal momento che qualcuno sul canale #boost IRC mi ha detto di assicurarmi che l'albero delle espressioni di phoenix sia stato prima copiato in profondità (in modo che non ci siano riferimenti pendenti quando è stato costruito x), ho avvolto l'espressione con boost::proto::deep_copy. Tuttavia that didn't quite work. Si blocca ancora quando compilato con il flag -O2 e works fine when omitting it.Perché questo esempio di giocattolo proto/fenice si blocca?

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

Mi aspetto che venga emesso hellobye.

+0

@llonesmiz vedi http://liveworkspace.org/code/3Rdg5D$0. Non c'è uscita –

+0

Da allora, lo spazio di animazione ha aggiornato l'aggiornamento alla versione 1.53, ora il tuo codice funziona come previsto. è stato risolto in 1.52. –

risposta

2

Sembra che questo sia un noto bug in Phoenix. Eviterei di usare phoenix::switch_ finché non viene ordinato. Sfortunatamente, il manutentore di Phoenix sembra essere impegnato con altre cose in questi giorni. :-(