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_funcmpl::_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
#include
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 e;
fusion::as_vector(fusion::remove_ifmpl::_1 >(e));
}
--
main.cpp: In instantiation of ‘struct meta_func >’:
../boost/boost_1_51_0/boost/mpl/aux_/nested_type_wknd.hpp:26:31:
required from ‘struct
boost::mpl::aux::nested_type_wknd > >’
../boost/boost_1_51_0/boost/mpl/not.hpp:39:8: required from ‘struct
boost::mpl::not_ > >’
../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, 0>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_ > > >; typename
boost::fusion::detail::as_vector<2>::apply<I0>::type =
boost::fusion::vector2]’
../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,
boost::mpl::not_ > > >; typename
boost::fusion::result_of::as_vector<const Sequence>::type =
boost::fusion::vector2]’
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_ > >’:
../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, 0>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_ > > >; typename
boost::fusion::detail::as_vector<2>::apply<I0>::type =
boost::fusion::vector2]’
../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,
boost::mpl::not_ > > >; typename
boost::fusion::result_of::as_vector<const Sequence>::type =
boost::fusion::vector2]’
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 >
’
--
-*- 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_, 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, 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, mpl_::arg<1> >, 0> >,
boost::mpl::bind1boost::fusion::result_of::value_of,
mpl_::arg<1> > >::apply, 0> >’
../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp:36:8:
required from ‘struct
boost::mpl::apply_wrap1, mpl_::arg<1> >, 0> >,
boost::mpl::bind1boost::fusion::result_of::value_of,
mpl_::arg<1> > >, boost::fusion::vector_iterator, 0> >’
../boost/boost_1_51_0/boost/mpl/aux_/preprocessed/gcc/apply.hpp:42:8:
required from ‘struct
boost::mpl::apply1, mpl_::arg<1> >, 0> >,
boost::mpl::bind1boost::fusion::result_of::value_of,
mpl_::arg<1> > >, boost::fusion::vector_iterator, 0> >’
../boost/boost_1_51_0/boost/fusion/algorithm/query/detail/find_if.hpp:33:35:
required from ‘struct
boost::fusion::detail::apply_filter, 0>,
boost::mpl::bind1, mpl_::arg<1> >, 0> >,
boost::mpl::bind1boost::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, 0>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_, 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, 0>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_, mpl_::arg<1> >, 0> > > >’
../boost/boost_1_51_0/boost/fusion/iterator/distance.hpp:60:16:
required from ‘struct
boost::fusion::result_of::distance, 0>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_, mpl_::arg<1> >, 0> > >,
boost::fusion::filter_iterator, 2>, boost::fusion::vector_iterator, 2>,
boost::mpl::not_, 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_implboost::fusion::filter_view_tag::apply, boost::mpl::not_, 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, boost::mpl::not_, 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, boost::mpl::not_, 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, boost::mpl::not_, 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, mpl_::arg<1> >, 0> >’
Thanks in advance,
--
Felipe Magno de Almeida