BVB Source Codes

mars Show unwrap_cv_reference.hpp Source code

Return Download mars: download unwrap_cv_reference.hpp Source code - Download mars Source code - Type:.hpp
  1. // Copyright Daniel Wallin, David Abrahams 2005. Use, modification and
  2. // distribution is subject to 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.  
  6. #ifndef UNWRAP_CV_REFERENCE_050328_HPP
  7. #define UNWRAP_CV_REFERENCE_050328_HPP
  8.  
  9. #include <boost/parameter/aux_/yesno.hpp>
  10. #include <boost/mpl/bool.hpp>
  11. #include <boost/mpl/identity.hpp>
  12. #include <boost/mpl/eval_if.hpp>
  13.  
  14. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { template<class T> class reference_wrapper; }
  15.  
  16. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace parameter { namespace aux {
  17.  
  18. //
  19. // reference_wrapper support -- because of the forwarding problem,
  20. // when passing arguments positionally by non-const reference, we
  21. // ask users of named parameter interfaces to use ref(x) to wrap
  22. // them.
  23. //
  24.  
  25. // is_cv_reference_wrapper returns mpl::true_ if T is of type
  26. // reference_wrapper<U> cv
  27. template <class U>
  28. yes_tag is_cv_reference_wrapper_check(reference_wrapper<U> const volatile*);
  29. no_tag is_cv_reference_wrapper_check(...);
  30.  
  31. template <class T>
  32. struct is_cv_reference_wrapper
  33. {
  34.     BOOST_STATIC_CONSTANT(
  35.         bool, value = (
  36.             sizeof(is_cv_reference_wrapper_check((T*)0)) == sizeof(yes_tag)
  37.         )
  38.     );
  39.  
  40.     typedef mpl::bool_<
  41. #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
  42.         is_cv_reference_wrapper::
  43. #endif
  44.     value> type;
  45. };
  46.  
  47. // Needed for unwrap_cv_reference below. T might be const, so
  48. // eval_if might fail because of deriving from T const on EDG.
  49. template <class T>
  50. struct get_type
  51. {
  52.     typedef typename T::type type;
  53. };
  54.  
  55. #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
  56. template <class T, class is_reference_wrapper = typename is_cv_reference_wrapper<T>::type>
  57. struct unwrap_cv_reference
  58. {
  59.     typedef T type;
  60. };
  61.  
  62. template <class T>
  63. struct unwrap_cv_reference<T const, mpl::false_>
  64. {
  65.     typedef T const type;
  66. };
  67.  
  68. template <class T>
  69. struct unwrap_cv_reference<T, mpl::true_>
  70.   : T
  71. {};
  72.  
  73. #else
  74. // Produces the unwrapped type to hold a reference to in named<>
  75. // Can't use mars_boost::unwrap_reference<> here because it
  76. // doesn't handle the case where T = reference_wrapper<U> cv
  77. template <class T>
  78. struct unwrap_cv_reference
  79. {
  80.     typedef typename mpl::eval_if<
  81.         is_cv_reference_wrapper<T>
  82.       , get_type<T>
  83.       , mpl::identity<T>
  84.     >::type type;
  85. };
  86. #endif
  87.  
  88. }}} // namespace mars_boost::parameter::aux
  89.  
  90. #endif // UNWRAP_CV_REFERENCE_050328_HPP
  91.  
  92.  
downloadunwrap_cv_reference.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