Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:53:09

0001 //  (C) Copyright 2009-2011 Frederic Bron.
0002 //
0003 //  Use, modification and distribution are subject to the Boost Software License,
0004 //  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
0005 //  http://www.boost.org/LICENSE_1_0.txt).
0006 //
0007 //  See http://www.boost.org/libs/type_traits for most recent version including documentation.
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    /* void* or fundamental */\
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    // references:
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    // rvalue refs:
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