|
Boost Users : |
Subject: [Boost-users] [fusion] remove_if and as_vector with Placeholder Expression as predicate
From: Felipe Magno de Almeida (felipe.m.almeida_at_[hidden])
Date: 2012-11-12 12:11:03
Hello,
I'm trying to remove_if a few elements from a fusion sequence. But it
is instantiating
my predicate with the placeholder from MPL later on. Including with as_vector.
The following code generates the error code I'm pasting by the end of
the message.
I'm using GCC 4.7.2 and Linux x86_64. If I wrap meta_func<mpl::_1> in
a mpl::lambda<>::type
then the errors following the first error messages is what I get. I'm
not sure if I'm doing
something wrong here. If anyone could please shed some light, I would
really appreciate it.
#include <boost/fusion/include/as_vector.hpp>
#include <boost/fusion/include/remove_if.hpp>
namespace mpl = boost::mpl;
namespace fusion = boost::fusion;
struct element
{
typedef mpl::false_ type;
};
template <typename T>
struct meta_func
{
typedef typename T::type type;
};
int main()
{
fusion::vector<element, element> e;
fusion::as_vector(fusion::remove_if<meta_func<mpl::_1> >(e));
}
-- main.cpp: In instantiation of struct meta_func<mpl_::arg<1> >: ../boost/boost_1_51_0/boost/mpl/aux_/nested_type_wknd.hpp:26:31: required from struct boost::mpl::aux::nested_type_wknd<meta_func<mpl_::arg<1> > > ../boost/boost_1_51_0/boost/mpl/not.hpp:39:8: required from struct boost::mpl::not_<meta_func<mpl_::arg<1> > > ../boost/boost_1_51_0/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp:48:36: required from static typename boost::fusion::detail::as_vector<2>::apply<I0>::type boost::fusion::detail::as_vector<2>::call(const Iterator&) [with Iterator = boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<meta_func<mpl_::arg<1> > > >; typename boost::fusion::detail::as_vector<2>::apply<I0>::type = boost::fusion::vector2<element, element>] ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:43:44: required from typename boost::fusion::result_of::as_vector<const Sequence>::type boost::fusion::as_vector(const Sequence&) [with Sequence = boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<meta_func<mpl_::arg<1> > > >; typename boost::fusion::result_of::as_vector<const Sequence>::type = boost::fusion::vector2<element, element>] main.cpp:22:62: required from here main.cpp:16:28: error: no type named type in struct mpl_::arg<1> In file included from ../boost/boost_1_51_0/boost/mpl/is_sequence.hpp:17:0, from ../boost/boost_1_51_0/boost/fusion/support/detail/is_mpl_sequence.hpp:12, from ../boost/boost_1_51_0/boost/fusion/support/tag_of.hpp:13, from ../boost/boost_1_51_0/boost/fusion/iterator/next.hpp:10, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector10.hpp:13, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector_fwd.hpp:14, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector.hpp:10, from ../boost/boost_1_51_0/boost/fusion/container/vector/detail/as_vector.hpp:18, from ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:10, from ../boost/boost_1_51_0/boost/fusion/include/as_vector.hpp:10, from main.cpp:2: ../boost/boost_1_51_0/boost/mpl/not.hpp: In instantiation of struct boost::mpl::not_<meta_func<mpl_::arg<1> > >: ../boost/boost_1_51_0/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp:48:36: required from static typename boost::fusion::detail::as_vector<2>::apply<I0>::type boost::fusion::detail::as_vector<2>::call(const Iterator&) [with Iterator = boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<meta_func<mpl_::arg<1> > > >; typename boost::fusion::detail::as_vector<2>::apply<I0>::type = boost::fusion::vector2<element, element>] ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:43:44: required from typename boost::fusion::result_of::as_vector<const Sequence>::type boost::fusion::as_vector(const Sequence&) [with Sequence = boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<meta_func<mpl_::arg<1> > > >; typename boost::fusion::result_of::as_vector<const Sequence>::type = boost::fusion::vector2<element, element>] main.cpp:22:62: required from here ../boost/boost_1_51_0/boost/mpl/not.hpp:39:8: error: value is not a member of boost::mpl::aux::nested_type_wknd<meta_func<mpl_::arg<1> > > -- -*- mode: compilation; default-directory: "~/dev/test/" -*- Compilation started at Mon Nov 12 15:09:15 bjam -q -j8 ...patience... ...found 584 targets... ...updating 2 targets... gcc.compile.c++ bin/gcc-4.7.2/debug/main.o In file included from ../boost/boost_1_51_0/boost/mpl/is_sequence.hpp:17:0, from ../boost/boost_1_51_0/boost/fusion/support/detail/is_mpl_sequence.hpp:12, from ../boost/boost_1_51_0/boost/fusion/support/tag_of.hpp:13, from ../boost/boost_1_51_0/boost/fusion/iterator/next.hpp:10, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector10.hpp:13, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector_fwd.hpp:14, from ../boost/boost_1_51_0/boost/fusion/container/vector/vector.hpp:10, from ../boost/boost_1_51_0/boost/fusion/container/vector/detail/as_vector.hpp:18, from ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:10, from ../boost/boost_1_51_0/boost/fusion/include/as_vector.hpp:10, from main.cpp:2: ../boost/boost_1_51_0/boost/mpl/not.hpp: In instantiation of struct boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >: ../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:36:8: required from struct boost::mpl::apply_wrap1<boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >, element> ../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/bind.hpp:144:21: required from struct boost::mpl::bind1<boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >, boost::mpl::bind1<boost::mpl::quote1<boost::fusion::result_of::value_of>, mpl_::arg<1> > >::apply<boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0> > ../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:36:8: required from struct boost::mpl::apply_wrap1<boost::mpl::bind1<boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >, boost::mpl::bind1<boost::mpl::quote1<boost::fusion::result_of::value_of>, mpl_::arg<1> > >, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0> > ../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/apply.hpp:42:8: required from struct boost::mpl::apply1<boost::mpl::bind1<boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >, boost::mpl::bind1<boost::mpl::quote1<boost::fusion::result_of::value_of>, mpl_::arg<1> > >, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0> > ../boost/boost_1_51_0/boost/fusion/algorithm/query/detail/find_if.hpp:33:35: required from struct boost::fusion::detail::apply_filter<boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::mpl::bind1<boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> >, boost::mpl::bind1<boost::mpl::quote1<boost::fusion::result_of::value_of>, mpl_::arg<1> > > > ../boost/boost_1_51_0/boost/mpl/if.hpp:67:11: [ skipping 10 instantiation contexts ] ../boost/boost_1_51_0/boost/fusion/support/tag_of.hpp:69:16: required from struct boost::fusion::traits::tag_of<boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > >, void> ../boost/boost_1_51_0/boost/fusion/support/tag_of.hpp:77:16: required from struct boost::fusion::detail::tag_of<boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > > > ../boost/boost_1_51_0/boost/fusion/iterator/distance.hpp:60:16: required from struct boost::fusion::result_of::distance<boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 0>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > >, boost::fusion::filter_iterator<boost::fusion::forward_traversal_tag, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::fusion::vector_iterator<const boost::fusion::vector<element, element>, 2>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > > > ../boost/boost_1_51_0/boost/fusion/view/filter_view/detail/size_impl.hpp:27:20: required from struct boost::fusion::extension::size_impl<boost::fusion::filter_view_tag>::apply<const boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > > > ../boost/boost_1_51_0/boost/fusion/sequence/intrinsic/size.hpp:68:16: required from struct boost::fusion::result_of::size<const boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > > > ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:23:82: required from struct boost::fusion::result_of::as_vector<const boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > > > ../boost/boost_1_51_0/boost/fusion/container/vector/convert.hpp:40:5: required by substitution of template<class Sequence> typename boost::fusion::result_of::as_vector<const Sequence>::type boost::fusion::as_vector(const Sequence&) [with Sequence = boost::fusion::filter_view<const boost::fusion::vector<element, element>, boost::mpl::not_<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > >] main.cpp:22:81: required from here ../boost/boost_1_51_0/boost/mpl/not.hpp:39:8: error: value is not a member of boost::mpl::aux::nested_type_wknd<boost::mpl::protect<boost::mpl::bind1<boost::mpl::quote1<meta_func, mpl_::void_>, mpl_::arg<1> >, 0> > Thanks in advance, -- Felipe Magno de Almeida
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net