Я экспериментирую с прото и фениксом, и это один из моих первых примеров игрушечных сбоев, и я понятия не имею, куда мне смотреть. Так как кто-то на канале #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
,
Похоже, это известный ошибка в Фениксе. Я бы не использовал phoenix::switch_
пока это не отсортировано. К сожалению, смотритель Феникса, кажется, занят в наши дни другими вещами. 🙁
Других решений пока нет …