Hi,
I'm a new user of xpresssive and I'd like to first give a big thank
you for this wonderful tool.
I'm having problems with the syntax for static regexes. The cheat
sheet in the documentation says that |(set= 'a','b','c')| and
|as_xpr('a') | 'b' |'c'| are equivalent yet the example
sregex parentheses;
parentheses = '(' >> *(keep(+~(boost::xpressive::set='(',')'))|by_ref(parentheses)) >> ')';
compiles while
sregex parentheses;
parentheses = '(' >> *(keep(+~(as_xpr('(')|')'))|by_ref(parentheses)) >> ')';
fails to do so (code and abbreviated errors attached). Additionally,
combining the original lines into one construction, like so:
sregex parentheses = '(' >> *(keep(+~(boost::xpressive::set='(',')'))|by_ref(parentheses)) >> ')';
compiles but running the code fails with:
regnestest: /usr/include/boost/xpressive/detail/utility/tracking_ptr.hpp:457:
const boost::shared_ptr<T>& boost::xpressive::detail::tracking_ptr<Type>::get_(bool) const [with Type = boost::xpressive::detail::regex_impl<__gnu_cxx::__normal_iterator > >]:
Assertion `!this->has_deps_()' failed.
and using as_xpr for the first term:
sregex parentheses = as_xpr('(') >> *(keep(+~(boost::xpressive::set='(',')'))|by_ref(parentheses)) >> ')';
also compiles but causes a seg fault when run!
All this is using g++ 4.2.3 and boost 1.34 as packaged with Debian
testing. These seem like library errors to me, but like I said, I'm new
to xpressive, and I'd be even happier to have my understanding improved.
Zachary
g++ -MMD regnestest.cpp -o regnestest
/usr/include/boost/xpressive/detail/static/productions/complement_compiler.hpp: In instantiation of ‘boost::xpressive::detail::complement, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’:
/usr/include/boost/xpressive/detail/static/productions/complement_compiler.hpp:227: instantiated from ‘boost::xpressive::detail::complement_transform::apply, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::proto::complement_tag>, boost::xpressive::detail::static_xpression, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’
/usr/include/boost/xpressive/proto/compiler/transform.hpp:65: instantiated from ‘boost::proto::transform_compiler::apply, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::proto::complement_tag>, boost::xpressive::detail::static_xpression, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’
/usr/include/boost/xpressive/proto/compiler/transform.hpp:74: instantiated from ‘boost::proto::transform_compiler::apply, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::proto::complement_tag>, boost::proto::unary_plus_tag>, boost::xpressive::detail::static_xpression, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’
/usr/include/boost/xpressive/proto/compiler/branch.hpp:37: instantiated from ‘boost::proto::branch_compiler, boost::xpressive::detail::ind_tag>::apply, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::proto::complement_tag>, boost::proto::unary_plus_tag>, boost::xpressive::detail::static_xpression, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’
/usr/include/boost/xpressive/proto/compiler/conditional.hpp:40: instantiated from ‘boost::proto::conditional_compiler, boost::xpressive::detail::ind_tag>, boost::proto::transform_compiler >, boost::xpressive::detail::seq_tag, void> >::apply, boost::proto::noop_tag>, boost::proto::unary_op, boost::proto::bitor_tag>, boost::proto::complement_tag>, boost::proto::unary_plus_tag>, boost::xpressive::detail::static_xpression, boost::xpressive::detail::xpression_visitor<__gnu_cxx::__normal_iterator >, mpl_::bool_<false>, boost::xpressive::cpp_regex_traits<char> > >’
--snipped for brevity--
regnestest.cpp:10: instantiated from here
--subsequent errors omitted for brevity--