Eksperymentuję z proto i feniksem i co jest jednym z moich pierwszych przykładów zabawek i nie mam pojęcia, gdzie powinienem patrzeć. Ponieważ ktoś na kanale IRC#boost powiedział mi, żebym upewnił się, że drzewo ekspresji feniksa jest najpierw głęboko skopiowane (tak, że nie ma żadnych zwisających odnośników, które zostały skonstruowane po zbudowaniu x
), zawinąłem wyrażenie przez boost::proto::deep_copy
. Jednak that didn't quite work. Nadal ulega awarii po skompilowaniu flagą -O2
i works fine when omitting it.Dlaczego ten przykład zabawki z proto/feniks rozbił się?
#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);
}
Oczekuję, że na wyjściu hellobye
.
@llonesmiz zobacz http://liveworkspace.org/code/3Rdg5D$0 .nie ma wyjścia. –
Od tego czasu liveworkspace ma aktualizację do wersji 1.53, teraz twój kod działa zgodnie z oczekiwaniami. zostało rozwiązane w 1.52. –