5

我正在试验 proto 和 phoenix,我的第一个玩具示例崩溃是什么,我不知道应该在哪里看。由于#boost IRC 频道上的某个人告诉我要确保首先深度复制 phoenix 表达式树(以便在构造时没有悬空引用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

4

1 回答 1

2

看起来这是Phoenix 中的一个已知错误phoenix::switch_在排序之前,我会避免使用。不幸的是,Phoenix 的维护者这几天似乎忙于其他事情。:-(

于 2012-12-30T19:02:57.043 回答