BVB Source Codes

mars Show indirect_traits.hpp Source code

Return Download mars: download indirect_traits.hpp Source code - Download mars Source code - Type:.hpp
  1. // Copyright David Abrahams 2002.
  2. // Distributed under the Boost Software License, Version 1.0. (See
  3. // accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. #ifndef INDIRECT_TRAITS_DWA2002131_HPP
  6. # define INDIRECT_TRAITS_DWA2002131_HPP
  7. # include <boost/type_traits/is_function.hpp>
  8. # include <boost/type_traits/is_reference.hpp>
  9. # include <boost/type_traits/is_pointer.hpp>
  10. # include <boost/type_traits/is_class.hpp>
  11. # include <boost/type_traits/is_const.hpp>
  12. # include <boost/type_traits/is_volatile.hpp>
  13. # include <boost/type_traits/is_member_function_pointer.hpp>
  14. # include <boost/type_traits/is_member_pointer.hpp>
  15. # include <boost/type_traits/remove_cv.hpp>
  16. # include <boost/type_traits/remove_reference.hpp>
  17. # include <boost/type_traits/remove_pointer.hpp>
  18.  
  19. # include <boost/detail/workaround.hpp>
  20.  
  21. # include <boost/mpl/eval_if.hpp>
  22. # include <boost/mpl/if.hpp>
  23. # include <boost/mpl/bool.hpp>
  24. # include <boost/mpl/and.hpp>
  25. # include <boost/mpl/not.hpp>
  26. # include <boost/mpl/aux_/lambda_support.hpp>
  27.  
  28.  
  29. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace detail {
  30.  
  31. namespace indirect_traits {
  32.  
  33. template <class T>
  34. struct is_reference_to_const : mpl::false_
  35. {
  36. };
  37.  
  38. template <class T>
  39. struct is_reference_to_const<T const&> : mpl::true_
  40. {
  41. };
  42.  
  43. #   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
  44. template<class T>
  45. struct is_reference_to_const<T const volatile&> : mpl::true_
  46. {
  47. };
  48. #   endif
  49.  
  50. template <class T>
  51. struct is_reference_to_function : mpl::false_
  52. {
  53. };
  54.  
  55. template <class T>
  56. struct is_reference_to_function<T&> : is_function<T>
  57. {
  58. };
  59.  
  60. template <class T>
  61. struct is_pointer_to_function : mpl::false_
  62. {
  63. };
  64.  
  65. // There's no such thing as a pointer-to-cv-function, so we don't need
  66. // specializations for those
  67. template <class T>
  68. struct is_pointer_to_function<T*> : is_function<T>
  69. {
  70. };
  71.  
  72. template <class T>
  73. struct is_reference_to_member_function_pointer_impl : mpl::false_
  74. {
  75. };
  76.  
  77. template <class T>
  78. struct is_reference_to_member_function_pointer_impl<T&>
  79.     : is_member_function_pointer<typename remove_cv<T>::type>
  80. {
  81. };
  82.  
  83.  
  84. template <class T>
  85. struct is_reference_to_member_function_pointer
  86.     : is_reference_to_member_function_pointer_impl<T>
  87. {
  88.     BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_member_function_pointer,(T))
  89. };
  90.  
  91. template <class T>
  92. struct is_reference_to_function_pointer_aux
  93.     : mpl::and_<
  94.           is_reference<T>
  95.         , is_pointer_to_function<
  96.               typename remove_cv<
  97.                   typename remove_reference<T>::type
  98.               >::type
  99.           >
  100.       >
  101. {
  102.     // There's no such thing as a pointer-to-cv-function, so we don't need specializations for those
  103. };
  104.  
  105. template <class T>
  106. struct is_reference_to_function_pointer
  107.     : mpl::if_<
  108.           is_reference_to_function<T>
  109.         , mpl::false_
  110.         , is_reference_to_function_pointer_aux<T>
  111.      >::type
  112. {
  113. };
  114.  
  115. template <class T>
  116. struct is_reference_to_non_const
  117.     : mpl::and_<
  118.           is_reference<T>
  119.         , mpl::not_<
  120.              is_reference_to_const<T>
  121.           >
  122.       >
  123. {
  124. };
  125.  
  126. template <class T>
  127. struct is_reference_to_volatile : mpl::false_
  128. {
  129. };
  130.  
  131. template <class T>
  132. struct is_reference_to_volatile<T volatile&> : mpl::true_
  133. {
  134. };
  135.  
  136. #   if defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140 // vc7.01 alpha workaround
  137. template <class T>
  138. struct is_reference_to_volatile<T const volatile&> : mpl::true_
  139. {
  140. };
  141. #   endif
  142.  
  143.  
  144. template <class T>
  145. struct is_reference_to_pointer : mpl::false_
  146. {
  147. };
  148.  
  149. template <class T>
  150. struct is_reference_to_pointer<T*&> : mpl::true_
  151. {
  152. };
  153.  
  154. template <class T>
  155. struct is_reference_to_pointer<T* const&> : mpl::true_
  156. {
  157. };
  158.  
  159. template <class T>
  160. struct is_reference_to_pointer<T* volatile&> : mpl::true_
  161. {
  162. };
  163.  
  164. template <class T>
  165. struct is_reference_to_pointer<T* const volatile&> : mpl::true_
  166. {
  167. };
  168.  
  169. template <class T>
  170. struct is_reference_to_class
  171.     : mpl::and_<
  172.           is_reference<T>
  173.         , is_class<
  174.               typename remove_cv<
  175.                   typename remove_reference<T>::type
  176.               >::type
  177.           >
  178.       >
  179. {
  180.     BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_reference_to_class,(T))
  181. };
  182.  
  183. template <class T>
  184. struct is_pointer_to_class
  185.     : mpl::and_<
  186.           is_pointer<T>
  187.         , is_class<
  188.               typename remove_cv<
  189.                   typename remove_pointer<T>::type
  190.               >::type
  191.           >
  192.       >
  193. {
  194.     BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_pointer_to_class,(T))
  195. };
  196.  
  197.  
  198. }
  199.  
  200. using namespace indirect_traits;
  201.  
  202. }} // namespace mars_boost::python::detail
  203.  
  204. #endif // INDIRECT_TRAITS_DWA2002131_HPP
  205.  
downloadindirect_traits.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top