File indexing completed on 2025-01-18 09:53:09
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef BOOST_TT_HAS_DEREFERENCE_HPP_INCLUDED
0010 #define BOOST_TT_HAS_DEREFERENCE_HPP_INCLUDED
0011
0012 #define BOOST_TT_TRAIT_NAME has_dereference
0013 #define BOOST_TT_TRAIT_OP *
0014 #define BOOST_TT_FORBIDDEN_IF\
0015 \
0016 (\
0017 (\
0018 ::boost::is_pointer< Rhs_noref >::value && \
0019 ::boost::is_void< Rhs_noptr >::value\
0020 ) || \
0021 ::boost::is_fundamental< Rhs_nocv >::value\
0022 )
0023
0024
0025 #include <boost/type_traits/detail/has_prefix_operator.hpp>
0026
0027 #undef BOOST_TT_TRAIT_NAME
0028 #undef BOOST_TT_TRAIT_OP
0029 #undef BOOST_TT_FORBIDDEN_IF
0030 #if defined(BOOST_TT_HAS_ACCURATE_BINARY_OPERATOR_DETECTION)
0031
0032 namespace boost {
0033
0034 template <class R>
0035 struct has_dereference<void*, R> : public false_type {};
0036 template <>
0037 struct has_dereference<void*, boost::binary_op_detail::dont_care> : public false_type {};
0038 template <>
0039 struct has_dereference<void*, void> : public false_type {};
0040
0041 template <class R>
0042 struct has_dereference<const void*, R> : public false_type {};
0043 template <>
0044 struct has_dereference<const void*, boost::binary_op_detail::dont_care> : public false_type {};
0045 template <>
0046 struct has_dereference<const void*, void> : public false_type {};
0047
0048 template <class R>
0049 struct has_dereference<volatile void*, R> : public false_type {};
0050 template <>
0051 struct has_dereference<volatile void*, boost::binary_op_detail::dont_care> : public false_type {};
0052 template <>
0053 struct has_dereference<volatile void*, void> : public false_type {};
0054
0055 template <class R>
0056 struct has_dereference<const volatile void*, R> : public false_type {};
0057 template <>
0058 struct has_dereference<const volatile void*, boost::binary_op_detail::dont_care> : public false_type {};
0059 template <>
0060 struct has_dereference<const volatile void*, void> : public false_type {};
0061
0062 template <class R>
0063 struct has_dereference<void*const, R> : public false_type {};
0064 template <>
0065 struct has_dereference<void*const, boost::binary_op_detail::dont_care> : public false_type {};
0066 template <>
0067 struct has_dereference<void*const, void> : public false_type {};
0068
0069 template <class R>
0070 struct has_dereference<const void*const, R> : public false_type {};
0071 template <>
0072 struct has_dereference<const void*const, boost::binary_op_detail::dont_care> : public false_type {};
0073 template <>
0074 struct has_dereference<const void*const, void> : public false_type {};
0075
0076 template <class R>
0077 struct has_dereference<volatile void*const, R> : public false_type {};
0078 template <>
0079 struct has_dereference<volatile void*const, boost::binary_op_detail::dont_care> : public false_type {};
0080 template <>
0081 struct has_dereference<volatile void*const, void> : public false_type {};
0082
0083 template <class R>
0084 struct has_dereference<const volatile void*const, R> : public false_type {};
0085 template <>
0086 struct has_dereference<const volatile void*const, boost::binary_op_detail::dont_care> : public false_type {};
0087 template <>
0088 struct has_dereference<const volatile void*const, void> : public false_type {};
0089
0090 template <class R>
0091 struct has_dereference<void*volatile, R> : public false_type {};
0092 template <>
0093 struct has_dereference<void*volatile, boost::binary_op_detail::dont_care> : public false_type {};
0094 template <>
0095 struct has_dereference<void*volatile, void> : public false_type {};
0096
0097 template <class R>
0098 struct has_dereference<const void*volatile, R> : public false_type {};
0099 template <>
0100 struct has_dereference<const void*volatile, boost::binary_op_detail::dont_care> : public false_type {};
0101 template <>
0102 struct has_dereference<const void*volatile, void> : public false_type {};
0103
0104 template <class R>
0105 struct has_dereference<volatile void*volatile, R> : public false_type {};
0106 template <>
0107 struct has_dereference<volatile void*volatile, boost::binary_op_detail::dont_care> : public false_type {};
0108 template <>
0109 struct has_dereference<volatile void*volatile, void> : public false_type {};
0110
0111 template <class R>
0112 struct has_dereference<const volatile void*volatile, R> : public false_type {};
0113 template <>
0114 struct has_dereference<const volatile void*volatile, boost::binary_op_detail::dont_care> : public false_type {};
0115 template <>
0116 struct has_dereference<const volatile void*volatile, void> : public false_type {};
0117
0118 template <class R>
0119 struct has_dereference<void*const volatile, R> : public false_type {};
0120 template <>
0121 struct has_dereference<void*const volatile, boost::binary_op_detail::dont_care> : public false_type {};
0122 template <>
0123 struct has_dereference<void*const volatile, void> : public false_type {};
0124
0125 template <class R>
0126 struct has_dereference<const void*const volatile, R> : public false_type {};
0127 template <>
0128 struct has_dereference<const void*const volatile, boost::binary_op_detail::dont_care> : public false_type {};
0129 template <>
0130 struct has_dereference<const void*const volatile, void> : public false_type {};
0131
0132 template <class R>
0133 struct has_dereference<volatile void*const volatile, R> : public false_type {};
0134 template <>
0135 struct has_dereference<volatile void*const volatile, boost::binary_op_detail::dont_care> : public false_type {};
0136 template <>
0137 struct has_dereference<volatile void*const volatile, void> : public false_type {};
0138
0139 template <class R>
0140 struct has_dereference<const volatile void*const volatile, R> : public false_type {};
0141 template <>
0142 struct has_dereference<const volatile void*const volatile, boost::binary_op_detail::dont_care> : public false_type {};
0143 template <>
0144 struct has_dereference<const volatile void*const volatile, void> : public false_type {};
0145
0146
0147 template <class R>
0148 struct has_dereference<void*&, R> : public false_type {};
0149 template <>
0150 struct has_dereference<void*&, boost::binary_op_detail::dont_care> : public false_type {};
0151 template <>
0152 struct has_dereference<void*&, void> : public false_type {};
0153
0154 template <class R>
0155 struct has_dereference<const void*&, R> : public false_type {};
0156 template <>
0157 struct has_dereference<const void*&, boost::binary_op_detail::dont_care> : public false_type {};
0158 template <>
0159 struct has_dereference<const void*&, void> : public false_type {};
0160
0161 template <class R>
0162 struct has_dereference<volatile void*&, R> : public false_type {};
0163 template <>
0164 struct has_dereference<volatile void*&, boost::binary_op_detail::dont_care> : public false_type {};
0165 template <>
0166 struct has_dereference<volatile void*&, void> : public false_type {};
0167
0168 template <class R>
0169 struct has_dereference<const volatile void*&, R> : public false_type {};
0170 template <>
0171 struct has_dereference<const volatile void*&, boost::binary_op_detail::dont_care> : public false_type {};
0172 template <>
0173 struct has_dereference<const volatile void*&, void> : public false_type {};
0174
0175 template <class R>
0176 struct has_dereference<void*const&, R> : public false_type {};
0177 template <>
0178 struct has_dereference<void*const&, boost::binary_op_detail::dont_care> : public false_type {};
0179 template <>
0180 struct has_dereference<void*const&, void> : public false_type {};
0181
0182 template <class R>
0183 struct has_dereference<const void*const&, R> : public false_type {};
0184 template <>
0185 struct has_dereference<const void*const&, boost::binary_op_detail::dont_care> : public false_type {};
0186 template <>
0187 struct has_dereference<const void*const&, void> : public false_type {};
0188
0189 template <class R>
0190 struct has_dereference<volatile void*const&, R> : public false_type {};
0191 template <>
0192 struct has_dereference<volatile void*const&, boost::binary_op_detail::dont_care> : public false_type {};
0193 template <>
0194 struct has_dereference<volatile void*const&, void> : public false_type {};
0195
0196 template <class R>
0197 struct has_dereference<const volatile void*const&, R> : public false_type {};
0198 template <>
0199 struct has_dereference<const volatile void*const&, boost::binary_op_detail::dont_care> : public false_type {};
0200 template <>
0201 struct has_dereference<const volatile void*const&, void> : public false_type {};
0202
0203 template <class R>
0204 struct has_dereference<void*volatile&, R> : public false_type {};
0205 template <>
0206 struct has_dereference<void*volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0207 template <>
0208 struct has_dereference<void*volatile&, void> : public false_type {};
0209
0210 template <class R>
0211 struct has_dereference<const void*volatile&, R> : public false_type {};
0212 template <>
0213 struct has_dereference<const void*volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0214 template <>
0215 struct has_dereference<const void*volatile&, void> : public false_type {};
0216
0217 template <class R>
0218 struct has_dereference<volatile void*volatile&, R> : public false_type {};
0219 template <>
0220 struct has_dereference<volatile void*volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0221 template <>
0222 struct has_dereference<volatile void*volatile&, void> : public false_type {};
0223
0224 template <class R>
0225 struct has_dereference<const volatile void*volatile&, R> : public false_type {};
0226 template <>
0227 struct has_dereference<const volatile void*volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0228 template <>
0229 struct has_dereference<const volatile void*volatile&, void> : public false_type {};
0230
0231 template <class R>
0232 struct has_dereference<void*const volatile&, R> : public false_type {};
0233 template <>
0234 struct has_dereference<void*const volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0235 template <>
0236 struct has_dereference<void*const volatile&, void> : public false_type {};
0237
0238 template <class R>
0239 struct has_dereference<const void*const volatile&, R> : public false_type {};
0240 template <>
0241 struct has_dereference<const void*const volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0242 template <>
0243 struct has_dereference<const void*const volatile&, void> : public false_type {};
0244
0245 template <class R>
0246 struct has_dereference<volatile void*const volatile&, R> : public false_type {};
0247 template <>
0248 struct has_dereference<volatile void*const volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0249 template <>
0250 struct has_dereference<volatile void*const volatile&, void> : public false_type {};
0251
0252 template <class R>
0253 struct has_dereference<const volatile void*const volatile&, R> : public false_type {};
0254 template <>
0255 struct has_dereference<const volatile void*const volatile&, boost::binary_op_detail::dont_care> : public false_type {};
0256 template <>
0257 struct has_dereference<const volatile void*const volatile&, void> : public false_type {};
0258
0259
0260 template <class R>
0261 struct has_dereference<void*&&, R> : public false_type {};
0262 template <>
0263 struct has_dereference<void*&&, boost::binary_op_detail::dont_care> : public false_type {};
0264 template <>
0265 struct has_dereference<void*&&, void> : public false_type {};
0266
0267 template <class R>
0268 struct has_dereference<const void*&&, R> : public false_type {};
0269 template <>
0270 struct has_dereference<const void*&&, boost::binary_op_detail::dont_care> : public false_type {};
0271 template <>
0272 struct has_dereference<const void*&&, void> : public false_type {};
0273
0274 template <class R>
0275 struct has_dereference<volatile void*&&, R> : public false_type {};
0276 template <>
0277 struct has_dereference<volatile void*&&, boost::binary_op_detail::dont_care> : public false_type {};
0278 template <>
0279 struct has_dereference<volatile void*&&, void> : public false_type {};
0280
0281 template <class R>
0282 struct has_dereference<const volatile void*&&, R> : public false_type {};
0283 template <>
0284 struct has_dereference<const volatile void*&&, boost::binary_op_detail::dont_care> : public false_type {};
0285 template <>
0286 struct has_dereference<const volatile void*&&, void> : public false_type {};
0287
0288 template <class R>
0289 struct has_dereference<void*const&&, R> : public false_type {};
0290 template <>
0291 struct has_dereference<void*const&&, boost::binary_op_detail::dont_care> : public false_type {};
0292 template <>
0293 struct has_dereference<void*const&&, void> : public false_type {};
0294
0295 template <class R>
0296 struct has_dereference<const void*const&&, R> : public false_type {};
0297 template <>
0298 struct has_dereference<const void*const&&, boost::binary_op_detail::dont_care> : public false_type {};
0299 template <>
0300 struct has_dereference<const void*const&&, void> : public false_type {};
0301
0302 template <class R>
0303 struct has_dereference<volatile void*const&&, R> : public false_type {};
0304 template <>
0305 struct has_dereference<volatile void*const&&, boost::binary_op_detail::dont_care> : public false_type {};
0306 template <>
0307 struct has_dereference<volatile void*const&&, void> : public false_type {};
0308
0309 template <class R>
0310 struct has_dereference<const volatile void*const&&, R> : public false_type {};
0311 template <>
0312 struct has_dereference<const volatile void*const&&, boost::binary_op_detail::dont_care> : public false_type {};
0313 template <>
0314 struct has_dereference<const volatile void*const&&, void> : public false_type {};
0315
0316 template <class R>
0317 struct has_dereference<void*volatile&&, R> : public false_type {};
0318 template <>
0319 struct has_dereference<void*volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0320 template <>
0321 struct has_dereference<void*volatile&&, void> : public false_type {};
0322
0323 template <class R>
0324 struct has_dereference<const void*volatile&&, R> : public false_type {};
0325 template <>
0326 struct has_dereference<const void*volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0327 template <>
0328 struct has_dereference<const void*volatile&&, void> : public false_type {};
0329
0330 template <class R>
0331 struct has_dereference<volatile void*volatile&&, R> : public false_type {};
0332 template <>
0333 struct has_dereference<volatile void*volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0334 template <>
0335 struct has_dereference<volatile void*volatile&&, void> : public false_type {};
0336
0337 template <class R>
0338 struct has_dereference<const volatile void*volatile&&, R> : public false_type {};
0339 template <>
0340 struct has_dereference<const volatile void*volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0341 template <>
0342 struct has_dereference<const volatile void*volatile&&, void> : public false_type {};
0343
0344 template <class R>
0345 struct has_dereference<void*const volatile&&, R> : public false_type {};
0346 template <>
0347 struct has_dereference<void*const volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0348 template <>
0349 struct has_dereference<void*const volatile&&, void> : public false_type {};
0350
0351 template <class R>
0352 struct has_dereference<const void*const volatile&&, R> : public false_type {};
0353 template <>
0354 struct has_dereference<const void*const volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0355 template <>
0356 struct has_dereference<const void*const volatile&&, void> : public false_type {};
0357
0358 template <class R>
0359 struct has_dereference<volatile void*const volatile&&, R> : public false_type {};
0360 template <>
0361 struct has_dereference<volatile void*const volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0362 template <>
0363 struct has_dereference<volatile void*const volatile&&, void> : public false_type {};
0364
0365 template <class R>
0366 struct has_dereference<const volatile void*const volatile&&, R> : public false_type {};
0367 template <>
0368 struct has_dereference<const volatile void*const volatile&&, boost::binary_op_detail::dont_care> : public false_type {};
0369 template <>
0370 struct has_dereference<const volatile void*const volatile&&, void> : public false_type {};
0371
0372
0373 }
0374 #endif
0375 #endif