File indexing completed on 2025-12-16 10:10:10
0001
0002
0003
0004
0005
0006
0007
0008
0009
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
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
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
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