
I'm using boost 1.42. As part of a proto transform, I am flattening an expression tree of comma operators and sending it to fusion::transform followed by fusion::for_each, something like this: for_each(transform(flatten(expr), func1), func2) I am getting a segmentation fault in for_each. func1 does not appear to be invoked. Program output: Building type list: comma( comma( function( terminal(int_) , terminal(32) ) , function( terminal(float_) , terminal(32) ) ) , function( terminal(int_) , terminal(16) ) ) 3 items Program received signal SIGSEGV, Segmentation fault. 0x0804d52d in boost::proto::result_of::child_c<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::comma, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Builder::keyword::int_>, 0l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<int const&>, 0l> > >, 2l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Builder::keyword::float_>, 0l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<int const&>, 0l> > >, 2l> > const&>, 2l> > const&, 0l>::call (e=...) at /usr/include/boost/proto/traits.hpp:1544 (gdb) print e $1 = (const Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::comma, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Builder::keyword::int_>, 0l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<int const&>, 0l> > >, 2l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::function, boost::proto::argsns_::list2<Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<Builder::keyword::float_>, 0l> > const&, Builder::Wrapper<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<int const&>, 0l> > >, 2l> > const&>, 2l> > &) @0x0: <error reading variable> Note the null expression reference. fusion::distance on a begin/end pair from the same sequence works as expected so I believe the sequence is at least well-formed. I've been wrestling with this for days. Any ideas on how to debug this? Thanks! -Dave