我正在试验 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
。