私はプロトとフェニックスを実験していますが、最初のおもちゃの例の1つがクラッシュし、どこを見ればよいのかわかりません。#boost IRCチャネルの誰かが、フェニックス式ツリーが最初にディープコピーされるように(x
構築時にぶら下がっている参照が残らないように)指示されたので、式をでラップしましたboost::proto::deep_copy
。しかし、それはうまくいきませんでした。-O2
フラグを付けてコンパイルするとクラッシュし、省略しても正常に動作します。
#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
。