Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:10:10

0001 // Boost.TypeErasure library
0002 //
0003 // Copyright 2011 Steven Watanabe
0004 //
0005 // Distributed under the Boost Software License Version 1.0. (See
0006 // accompanying file LICENSE_1_0.txt or copy at
0007 // http://www.boost.org/LICENSE_1_0.txt)
0008 //
0009 // $Id$
0010 
0011 #if !defined(BOOST_PP_IS_ITERATING)
0012 
0013 #ifndef BOOST_TYPE_ERASURE_DETAIL_CONSTRUCT_HPP_INCLUDED
0014 #define BOOST_TYPE_ERASURE_DETAIL_CONSTRUCT_HPP_INCLUDED
0015 
0016 #define BOOST_PP_FILENAME_1 <boost/type_erasure/detail/construct.hpp>
0017 #define BOOST_PP_ITERATION_LIMITS (1, BOOST_TYPE_ERASURE_MAX_ARITY)
0018 #include BOOST_PP_ITERATE()
0019 
0020 #endif
0021 
0022 #else
0023 
0024 #define N BOOST_PP_ITERATION()
0025 
0026 #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
0027 
0028 #define BOOST_TYPE_ERASURE_FORWARD_I(z, n, data) ::std::forward<BOOST_PP_CAT(U, n)>(BOOST_PP_CAT(u, n))
0029 #define BOOST_TYPE_ERASURE_FORWARD(n) BOOST_PP_ENUM(n, BOOST_TYPE_ERASURE_FORWARD_I, ~)
0030 
0031 #if N > 1
0032 
0033     template<
0034         class R
0035         BOOST_PP_ENUM_TRAILING_PARAMS(N, class A)
0036         BOOST_PP_ENUM_TRAILING_PARAMS(N, class U)
0037     >
0038     const table_type& _boost_type_erasure_extract_table(
0039         ::boost::type_erasure::constructible<R(BOOST_PP_ENUM_PARAMS(N, A))>*
0040         BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &u))
0041     {
0042         return *::boost::type_erasure::detail::BOOST_PP_CAT(extract_table, N)(
0043             (R(*)(BOOST_PP_ENUM_PARAMS(N, A)))0,
0044             BOOST_PP_ENUM_PARAMS(N, u));
0045     }
0046 
0047     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0048     any(BOOST_PP_ENUM_BINARY_PARAMS(N, U, &&u))
0049       : table(
0050             _boost_type_erasure_extract_table(
0051                 false? this->_boost_type_erasure_deduce_constructor(BOOST_TYPE_ERASURE_FORWARD(N)) : 0
0052                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0053             )
0054         ),
0055         data(::boost::type_erasure::call(
0056             ::boost::type_erasure::detail::make(
0057                 false? this->_boost_type_erasure_deduce_constructor(BOOST_TYPE_ERASURE_FORWARD(N)) : 0
0058             ), BOOST_TYPE_ERASURE_FORWARD(N))
0059         )
0060     {}
0061 
0062 #endif
0063 
0064     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0065     any(const binding<Concept>& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &&u))
0066       : table(binding_arg),
0067         data(
0068             ::boost::type_erasure::call(
0069                 binding_arg,
0070                 ::boost::type_erasure::detail::make(
0071                     false? this->_boost_type_erasure_deduce_constructor(BOOST_TYPE_ERASURE_FORWARD(N)) : 0
0072                 )
0073                 BOOST_PP_COMMA_IF(N)
0074                 BOOST_TYPE_ERASURE_FORWARD(N)
0075             )
0076         )
0077     {}
0078 
0079     // disambiguate
0080     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0081     any(binding<Concept>& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &&u))
0082       : table(binding_arg),
0083         data(
0084             ::boost::type_erasure::call(
0085                 binding_arg,
0086                 ::boost::type_erasure::detail::make(
0087                     false? this->_boost_type_erasure_deduce_constructor(BOOST_TYPE_ERASURE_FORWARD(N)) : 0
0088                 )
0089                 BOOST_PP_COMMA_IF(N)
0090                 BOOST_TYPE_ERASURE_FORWARD(N)
0091             )
0092         )
0093     {}
0094 
0095     // disambiguate
0096     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0097     any(binding<Concept>&& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &&u))
0098       : table(binding_arg),
0099         data(
0100             ::boost::type_erasure::call(
0101                 binding_arg,
0102                 ::boost::type_erasure::detail::make(
0103                     false? this->_boost_type_erasure_deduce_constructor(BOOST_TYPE_ERASURE_FORWARD(N)) : 0
0104                 )
0105                 BOOST_PP_COMMA_IF(N)
0106                 BOOST_TYPE_ERASURE_FORWARD(N)
0107             )
0108         )
0109     {}
0110 
0111 #undef BOOST_TYPE_ERASURE_FORWARD
0112 #undef BOOST_TYPE_ERASURE_FORWARD_I
0113 
0114 #else
0115 
0116 #if N > 1
0117 
0118     template<
0119         class R
0120         BOOST_PP_ENUM_TRAILING_PARAMS(N, class A)
0121         BOOST_PP_ENUM_TRAILING_PARAMS(N, class U)
0122     >
0123     const table_type& _boost_type_erasure_extract_table(
0124         ::boost::type_erasure::constructible<R(BOOST_PP_ENUM_PARAMS(N, A))>*
0125         BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &u))
0126     {
0127         return *::boost::type_erasure::detail::BOOST_PP_CAT(extract_table, N)(
0128             (R(*)(BOOST_PP_ENUM_PARAMS(N, A)))0,
0129             BOOST_PP_ENUM_PARAMS(N, u));
0130     }
0131 
0132     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0133     any(BOOST_PP_ENUM_BINARY_PARAMS(N, const U, &u))
0134       : table(
0135             _boost_type_erasure_extract_table(
0136                 false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0137                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0138             )
0139         ),
0140         data(::boost::type_erasure::call(
0141             ::boost::type_erasure::detail::make(
0142                 false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0143             ), BOOST_PP_ENUM_PARAMS(N, u))
0144         )
0145     {}
0146 
0147     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0148     any(BOOST_PP_ENUM_BINARY_PARAMS(N, U, &u))
0149       : table(
0150             _boost_type_erasure_extract_table(
0151                 false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0152                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0153             )
0154         ),
0155         data(::boost::type_erasure::call(
0156             ::boost::type_erasure::detail::make(
0157                 false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0158             ), BOOST_PP_ENUM_PARAMS(N, u))
0159         )
0160     {}
0161 
0162 #endif
0163 
0164     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0165     any(const binding<Concept>& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, const U, &u))
0166       : table(binding_arg),
0167         data(
0168             ::boost::type_erasure::call(
0169                 binding_arg,
0170                 ::boost::type_erasure::detail::make(
0171                     false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0172                 )
0173                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0174             )
0175         )
0176     {}
0177 
0178     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0179     any(const binding<Concept>& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &u))
0180       : table(binding_arg),
0181         data(
0182             ::boost::type_erasure::call(
0183                 binding_arg,
0184                 ::boost::type_erasure::detail::make(
0185                     false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0186                 )
0187                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0188             )
0189         )
0190     {}
0191 
0192     // disambiguate
0193     template<BOOST_PP_ENUM_PARAMS(N, class U)>
0194     any(binding<Concept>& binding_arg BOOST_PP_ENUM_TRAILING_BINARY_PARAMS(N, U, &u))
0195       : table(binding_arg),
0196         data(
0197             ::boost::type_erasure::call(
0198                 binding_arg,
0199                 ::boost::type_erasure::detail::make(
0200                     false? this->_boost_type_erasure_deduce_constructor(BOOST_PP_ENUM_PARAMS(N, u)) : 0
0201                 )
0202                 BOOST_PP_ENUM_TRAILING_PARAMS(N, u)
0203             )
0204         )
0205     {}
0206 
0207 #endif
0208 
0209 #undef N
0210 
0211 #endif