annotate DEPENDENCIES/generic/include/boost/tti/detail/dstatic_mem_data.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents c530137014c0
children
rev   line source
Chris@16 1
Chris@16 2 // (C) Copyright Edward Diener 2011,2012,2013
Chris@16 3 // Use, modification and distribution are subject to the Boost Software License,
Chris@16 4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 5 // http://www.boost.org/LICENSE_1_0.txt).
Chris@16 6
Chris@16 7 #if !defined(BOOST_TTI_DETAIL_STATIC_MEM_DATA_HPP)
Chris@16 8 #define BOOST_TTI_DETAIL_STATIC_MEM_DATA_HPP
Chris@16 9
Chris@16 10 #include <boost/config.hpp>
Chris@16 11 #include <boost/function_types/is_function.hpp>
Chris@16 12 #include <boost/mpl/bool.hpp>
Chris@101 13 #include <boost/mpl/eval_if.hpp>
Chris@16 14 #include <boost/preprocessor/cat.hpp>
Chris@101 15 #include <boost/type_traits/is_class.hpp>
Chris@16 16 #include <boost/type_traits/detail/yes_no_type.hpp>
Chris@16 17 #include <boost/tti/detail/dnullptr.hpp>
Chris@16 18
Chris@16 19 #if defined(BOOST_MSVC)
Chris@16 20
Chris@101 21 #define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
Chris@16 22 template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
Chris@101 23 struct BOOST_PP_CAT(trait,_detail_hsd_op) \
Chris@16 24 { \
Chris@16 25 template<bool,typename BOOST_TTI_DETAIL_TP_U> \
Chris@16 26 struct menable_if; \
Chris@16 27 \
Chris@16 28 template<typename BOOST_TTI_DETAIL_TP_U> \
Chris@16 29 struct menable_if<true,BOOST_TTI_DETAIL_TP_U> \
Chris@16 30 { \
Chris@16 31 typedef BOOST_TTI_DETAIL_TP_U type; \
Chris@16 32 }; \
Chris@16 33 \
Chris@16 34 template<typename BOOST_TTI_DETAIL_TP_U,typename BOOST_TTI_DETAIL_TP_V> \
Chris@16 35 static ::boost::type_traits::yes_type check2(BOOST_TTI_DETAIL_TP_V *); \
Chris@16 36 \
Chris@16 37 template<typename BOOST_TTI_DETAIL_TP_U,typename BOOST_TTI_DETAIL_TP_V> \
Chris@16 38 static ::boost::type_traits::no_type check2(BOOST_TTI_DETAIL_TP_U); \
Chris@16 39 \
Chris@16 40 template<typename BOOST_TTI_DETAIL_TP_U,typename BOOST_TTI_DETAIL_TP_V> \
Chris@16 41 static typename \
Chris@16 42 menable_if \
Chris@16 43 < \
Chris@16 44 sizeof(check2<BOOST_TTI_DETAIL_TP_U,BOOST_TTI_DETAIL_TP_V>(&BOOST_TTI_DETAIL_TP_U::name))==sizeof(::boost::type_traits::yes_type), \
Chris@16 45 ::boost::type_traits::yes_type \
Chris@16 46 > \
Chris@16 47 ::type \
Chris@16 48 has_matching_member(int); \
Chris@16 49 \
Chris@16 50 template<typename BOOST_TTI_DETAIL_TP_U,typename BOOST_TTI_DETAIL_TP_V> \
Chris@16 51 static ::boost::type_traits::no_type has_matching_member(...); \
Chris@16 52 \
Chris@16 53 template<class BOOST_TTI_DETAIL_TP_U,class BOOST_TTI_DETAIL_TP_V> \
Chris@16 54 struct ttc_sd \
Chris@16 55 { \
Chris@16 56 typedef boost::mpl::bool_<sizeof(has_matching_member<BOOST_TTI_DETAIL_TP_V,BOOST_TTI_DETAIL_TP_U>(0))==sizeof(::boost::type_traits::yes_type)> type; \
Chris@16 57 }; \
Chris@16 58 \
Chris@16 59 typedef typename ttc_sd<BOOST_TTI_DETAIL_TP_TYPE,BOOST_TTI_DETAIL_TP_T>::type type; \
Chris@16 60 }; \
Chris@16 61 /**/
Chris@16 62
Chris@101 63 #elif defined(__SUNPRO_CC)
Chris@16 64
Chris@101 65 #define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
Chris@16 66 template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
Chris@101 67 struct BOOST_PP_CAT(trait,_detail_hsd_op) \
Chris@101 68 { \
Chris@101 69 template<BOOST_TTI_DETAIL_TP_TYPE *> \
Chris@101 70 struct helper {}; \
Chris@101 71 \
Chris@101 72 template<class BOOST_TTI_DETAIL_TP_U> \
Chris@101 73 static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
Chris@101 74 \
Chris@101 75 template<class BOOST_TTI_DETAIL_TP_U> \
Chris@101 76 static ::boost::type_traits::no_type chkt(...); \
Chris@101 77 \
Chris@101 78 typedef boost::mpl::bool_<(!boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))> type; \
Chris@101 79 }; \
Chris@101 80 /**/
Chris@101 81
Chris@101 82 #else
Chris@101 83
Chris@101 84 #define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
Chris@101 85 template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
Chris@101 86 struct BOOST_PP_CAT(trait,_detail_hsd_op) \
Chris@16 87 { \
Chris@16 88 template<BOOST_TTI_DETAIL_TP_TYPE *> \
Chris@16 89 struct helper; \
Chris@16 90 \
Chris@16 91 template<class BOOST_TTI_DETAIL_TP_U> \
Chris@16 92 static ::boost::type_traits::yes_type chkt(helper<&BOOST_TTI_DETAIL_TP_U::name> *); \
Chris@16 93 \
Chris@16 94 template<class BOOST_TTI_DETAIL_TP_U> \
Chris@16 95 static ::boost::type_traits::no_type chkt(...); \
Chris@16 96 \
Chris@101 97 typedef boost::mpl::bool_<(!boost::function_types::is_function<BOOST_TTI_DETAIL_TP_TYPE>::value) && (sizeof(chkt<BOOST_TTI_DETAIL_TP_T>(BOOST_TTI_DETAIL_NULLPTR))==sizeof(::boost::type_traits::yes_type))> type; \
Chris@16 98 }; \
Chris@16 99 /**/
Chris@16 100
Chris@16 101 #endif // defined(BOOST_MSVC)
Chris@16 102
Chris@101 103 #define BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA(trait,name) \
Chris@101 104 BOOST_TTI_DETAIL_TRAIT_HAS_STATIC_MEMBER_DATA_OP(trait,name) \
Chris@101 105 template<class BOOST_TTI_DETAIL_TP_T,class BOOST_TTI_DETAIL_TP_TYPE> \
Chris@101 106 struct BOOST_PP_CAT(trait,_detail_hsd) : \
Chris@101 107 boost::mpl::eval_if \
Chris@101 108 < \
Chris@101 109 boost::is_class<BOOST_TTI_DETAIL_TP_T>, \
Chris@101 110 BOOST_PP_CAT(trait,_detail_hsd_op)<BOOST_TTI_DETAIL_TP_T,BOOST_TTI_DETAIL_TP_TYPE>, \
Chris@101 111 boost::mpl::false_ \
Chris@101 112 > \
Chris@101 113 { \
Chris@101 114 }; \
Chris@101 115 /**/
Chris@101 116
Chris@16 117 #endif // BOOST_TTI_DETAIL_STATIC_MEM_DATA_HPP