Почему этот пример с игрушкой прото / феникс вылетает?

Я экспериментирую с прото и фениксом, и это один из моих первых примеров игрушечных сбоев, и я понятия не имею, куда мне смотреть. Так как кто-то на канале #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,

5

Решение

Похоже, это известный ошибка в Фениксе. Я бы не использовал phoenix::switch_ пока это не отсортировано. К сожалению, смотритель Феникса, кажется, занят в наши дни другими вещами. 🙁

2

Другие решения

Других решений пока нет …