Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:43:27

0001 // Copyright Daniel Wallin 2006.
0002 // Copyright Cromwell D. Enage 2017.
0003 // Distributed under the Boost Software License, Version 1.0.
0004 // (See accompanying file LICENSE_1_0.txt or copy at
0005 // http://www.boost.org/LICENSE_1_0.txt)
0006 
0007 #ifndef BOOST_PARAMETER_AUX_PP_IMPL_ARGUMENT_PACK_HPP
0008 #define BOOST_PARAMETER_AUX_PP_IMPL_ARGUMENT_PACK_HPP
0009 
0010 #include <boost/parameter/aux_/pack/tag_keyword_arg.hpp>
0011 #include <boost/parameter/aux_/pack/make_arg_list.hpp>
0012 #include <boost/parameter/config.hpp>
0013 
0014 #if defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING)
0015 #include <boost/parameter/aux_/pack/make_parameter_spec_items.hpp>
0016 
0017 #if defined(BOOST_PARAMETER_CAN_USE_MP11)
0018 #include <boost/mp11/integral.hpp>
0019 #include <boost/mp11/list.hpp>
0020 #else
0021 #include <boost/mpl/bool.hpp>
0022 #include <boost/mpl/pair.hpp>
0023 #endif
0024 
0025 namespace boost { namespace parameter { namespace aux {
0026 
0027     template <typename Parameters, typename ...Args>
0028     struct argument_pack
0029     {
0030         typedef typename ::boost::parameter::aux::make_arg_list<
0031             typename ::boost::parameter::aux::make_parameter_spec_items<
0032                 typename Parameters::parameter_spec
0033               , Args...
0034             >::type
0035           , typename Parameters::deduced_list
0036           , ::boost::parameter::aux::tag_keyword_arg
0037 #if defined(BOOST_PARAMETER_CAN_USE_MP11)
0038           , ::boost::mp11::mp_false
0039 #else
0040           , ::boost::mpl::false_
0041 #endif
0042         >::type result;
0043 #if defined(BOOST_PARAMETER_CAN_USE_MP11)
0044         using type = ::boost::mp11::mp_at_c<result,0>;
0045 #else
0046         typedef typename ::boost::mpl::first<result>::type type;
0047 #endif
0048     };
0049 }}} // namespace boost::parameter::aux
0050 
0051 #else   // !defined(BOOST_PARAMETER_HAS_PERFECT_FORWARDING)
0052 #include <boost/parameter/aux_/void.hpp>
0053 #include <boost/parameter/aux_/pack/make_items.hpp>
0054 #include <boost/parameter/aux_/preprocessor/no_perfect_forwarding_begin.hpp>
0055 #include <boost/preprocessor/facilities/intercept.hpp>
0056 #include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
0057 #include <boost/mpl/bool.hpp>
0058 #include <boost/mpl/pair.hpp>
0059 
0060 namespace boost { namespace parameter { namespace aux {
0061 
0062     template <
0063         typename Parameters
0064         BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(
0065             BOOST_PARAMETER_MAX_ARITY
0066           , typename A
0067           , = ::boost::parameter::void_ BOOST_PP_INTERCEPT
0068         )
0069     >
0070     struct argument_pack
0071     {
0072         typedef typename ::boost::parameter::aux::make_arg_list<
0073             typename BOOST_PARAMETER_build_arg_list(
0074                 BOOST_PARAMETER_MAX_ARITY
0075               , ::boost::parameter::aux::make_items
0076               , typename Parameters::parameter_spec
0077               , A
0078             )::type
0079           , typename Parameters::deduced_list
0080           , ::boost::parameter::aux::tag_keyword_arg
0081           , ::boost::mpl::false_
0082         >::type result;
0083         typedef typename ::boost::mpl::first<result>::type type;
0084     };
0085 }}} // namespace boost::parameter::aux
0086 
0087 #include <boost/parameter/aux_/preprocessor/no_perfect_forwarding_end.hpp>
0088 
0089 #endif  // BOOST_PARAMETER_HAS_PERFECT_FORWARDING
0090 #endif  // include guard
0091