#ifndef BOOST_MP11_DETAIL_MP_REMOVE_IF_HPP_INCLUDED #define BOOST_MP11_DETAIL_MP_REMOVE_IF_HPP_INCLUDED // Copyright 2015-2019 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // // See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt #include #include #include #include namespace boost { namespace mp11 { // mp_remove_if namespace detail { template class P> struct mp_remove_if_impl { }; template class L, class... T, template class P> struct mp_remove_if_impl, P> { #if BOOST_MP11_WORKAROUND( BOOST_MP11_MSVC, < 1920 ) template struct _f { using type = mp_if, mp_list<>, mp_list>; }; using type = mp_append, typename _f::type...>; #else template using _f = mp_if, mp_list<>, mp_list>; using type = mp_append, _f...>; #endif }; } // namespace detail template class P> using mp_remove_if = typename detail::mp_remove_if_impl::type; template using mp_remove_if_q = mp_remove_if; } // namespace mp11 } // namespace boost #endif // #ifndef BOOST_MP11_DETAIL_MP_REMOVE_IF_HPP_INCLUDED