Ich experimentiere mit Proto und Phönix und was ist eines meiner ersten Spielzeug Beispiele Crash und ich habe keine Ahnung wo ich hinschauen sollte. Da jemand auf dem IRC-Kanal #boost mich aufgefordert hat, sicherzustellen, dass der Phoenix-Ausdrucksbaum zuerst tief kopiert wird (so dass keine freien Referenzen übrig sind, wenn x
konstruiert wurde), habe ich den Ausdruck um boost::proto::deep_copy
gekapselt. Jedoch that didn't quite work. Es stürzt immer noch ab, wenn es mit dem -O2
Flag und works fine when omitting it kompiliert wird.Warum stürzt dieses Prototyp-Spielzeug ab?
#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);
}
Ich erwarte, dass dies zur Ausgabe hellobye
.
@llonesmiz siehe http://liveworkspace.org/code/3Rdg5D$0. Es gibt keine Ausgabe. –
Seitdem hat Liveworkspace Update Boost auf Version 1.53, jetzt funktioniert Ihr Code wie erwartet. Ich glaube, das Problem wurde in 1.52 gelöst. –