43 #pragma GCC system_header
46 #include <boost/mpl/is_sequence.hpp>
47 #include <boost/mpl/begin_end.hpp>
48 #include <boost/mpl/next_prior.hpp>
49 #include <boost/mpl/deref.hpp>
50 #include <boost/mpl/assert.hpp>
51 #include <boost/mpl/remove_if.hpp>
52 #include <boost/mpl/contains.hpp>
53 #include <boost/mpl/not.hpp>
54 #include <boost/mpl/aux_/unwrap.hpp>
56 #include <type_traits>
61 template <
bool done = true>
64 template<
typename Iterator,
typename LastIterator,
typename F>
72 template<
typename Iterator,
typename LastIterator,
typename F>
75 using arg =
typename boost::mpl::deref<Iterator>::type;
77 #if (defined _WIN32 && defined _MSC_VER && !defined(__clang__))
78 boost::mpl::aux::unwrap (f, 0).operator()<arg> ();
80 boost::mpl::aux::unwrap (f, 0).template operator()<arg> ();
83 using iter =
typename boost::mpl::next<Iterator>::type;
85 ::template execute<iter, LastIterator, F> (f);
90 template<
typename Sequence,
typename F>
inline void
93 BOOST_MPL_ASSERT (( boost::mpl::is_sequence<Sequence> ));
94 using first =
typename boost::mpl::begin<Sequence>::type;
95 using last =
typename boost::mpl::end<Sequence>::type;
100 template <
typename Sequence1,
typename Sequence2>
103 using type =
typename boost::mpl::remove_if<Sequence1, boost::mpl::not_<boost::mpl::contains<Sequence2, boost::mpl::_1> > >
::type;
typename boost::mpl::remove_if< Sequence1, boost::mpl::not_< boost::mpl::contains< Sequence2, boost::mpl::_1 > > >::type type