![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/mp11/ |
Upload File : |
#ifndef BOOST_MP11_MPL_HPP_INCLUDED #define BOOST_MP11_MPL_HPP_INCLUDED // Copyright 2017 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 <boost/mp11/list.hpp> #include <boost/mp11/algorithm.hpp> #include <tuple> namespace boost { namespace mpl { struct forward_iterator_tag; namespace aux { struct mp11_tag {}; template<class L> struct mp11_iterator { using category = forward_iterator_tag; using type = mp11::mp_first<L>; using next = mp11_iterator<mp11::mp_rest<L>>; }; } // namespace aux // at template< typename Tag > struct at_impl; template<> struct at_impl<aux::mp11_tag> { template<class L, class I> struct apply { using type = mp11::mp_at<L, I>; }; }; // back template< typename Tag > struct back_impl; template<> struct back_impl<aux::mp11_tag> { template<class L> struct apply { using N = mp11::mp_size<L>; using type = mp11::mp_at_c<L, N::value - 1>; }; }; // begin template< typename Tag > struct begin_impl; template<> struct begin_impl<aux::mp11_tag> { template<class L> struct apply { using type = aux::mp11_iterator<L>; }; }; // clear template< typename Tag > struct clear_impl; template<> struct clear_impl<aux::mp11_tag> { template<class L> struct apply { using type = mp11::mp_clear<L>; }; }; // end template< typename Tag > struct end_impl; template<> struct end_impl<aux::mp11_tag> { template<class L> struct apply { using type = aux::mp11_iterator<mp11::mp_clear<L>>; }; }; // front template< typename Tag > struct front_impl; template<> struct front_impl<aux::mp11_tag> { template<class L> struct apply { using type = mp11::mp_front<L>; }; }; // pop_front template< typename Tag > struct pop_front_impl; template<> struct pop_front_impl<aux::mp11_tag> { template<class L> struct apply { using type = mp11::mp_pop_front<L>; }; }; // push_back template< typename Tag > struct push_back_impl; template<> struct push_back_impl<aux::mp11_tag> { template<class L, class T> struct apply { using type = mp11::mp_push_back<L, T>; }; }; // push_front template< typename Tag > struct push_front_impl; template<> struct push_front_impl<aux::mp11_tag> { template<class L, class T> struct apply { using type = mp11::mp_push_front<L, T>; }; }; // sequence_tag template< typename Sequence > struct sequence_tag; template<class... T> struct sequence_tag<mp11::mp_list<T...>> { using type = aux::mp11_tag; }; template<class... T> struct sequence_tag<std::tuple<T...>> { using type = aux::mp11_tag; }; // size template< typename Tag > struct size_impl; template<> struct size_impl<aux::mp11_tag> { template<class L> struct apply { using type = mp11::mp_size<L>; }; }; } // namespace mpl } // namespace boost #endif // #ifndef BOOST_MP11_MPL_HPP_INCLUDED