BVB Source Codes

mars Show move_helpers.hpp Source code

Return Download mars: download move_helpers.hpp Source code - Download mars Source code - Type:.hpp
  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright Ion Gaztanaga 2010-2012.
  4. // Distributed under the Boost Software License, Version 1.0.
  5. // (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. //
  8. // See http://www.boost.org/libs/move for documentation.
  9. //
  10. //////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef BOOST_MOVE_MOVE_HELPERS_HPP
  13. #define BOOST_MOVE_MOVE_HELPERS_HPP
  14.  
  15. #ifndef BOOST_CONFIG_HPP
  16. #  include <boost/config.hpp>
  17. #endif
  18. #
  19. #if defined(BOOST_HAS_PRAGMA_ONCE)
  20. #  pragma once
  21. #endif
  22.  
  23. #include <boost/move/utility_core.hpp>
  24. #include <boost/move/detail/meta_utils.hpp>
  25.  
  26. #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  27.  
  28. #define BOOST_MOVE_CATCH_CONST(U)  \
  29.    typename ::mars_boost::move_detail::if_< ::mars_boost::move_detail::is_class<U>, BOOST_CATCH_CONST_RLVALUE(U), const U &>::type
  30. #define BOOST_MOVE_CATCH_RVALUE(U)\
  31.    typename ::mars_boost::move_detail::if_< ::mars_boost::move_detail::is_class<U>, BOOST_RV_REF(U), ::mars_boost::move_detail::nat>::type
  32. #define BOOST_MOVE_CATCH_FWD(U) BOOST_FWD_REF(U)
  33. #else
  34. #define BOOST_MOVE_CATCH_CONST(U)  const U &
  35. #define BOOST_MOVE_CATCH_RVALUE(U) U &&
  36. #define BOOST_MOVE_CATCH_FWD(U)    U &&
  37. #endif
  38.  
  39. ////////////////////////////////////////
  40. //
  41. // BOOST_MOVE_CONVERSION_AWARE_CATCH
  42. //
  43. ////////////////////////////////////////
  44.  
  45. #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
  46.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  47.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
  48.       {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
  49.       \
  50.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  51.       {  return FWD_FUNCTION(::mars_boost::move(x));  }\
  52.       \
  53.       RETURN_VALUE PUB_FUNCTION(TYPE &x)\
  54.       {  return FWD_FUNCTION(const_cast<const TYPE &>(x)); }\
  55.    //
  56.    #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
  57.       #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  58.          BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  59.          \
  60.          template<class BOOST_MOVE_TEMPL_PARAM>\
  61.          RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\
  62.             typename ::mars_boost::move_detail::enable_if_and\
  63.                                  < ::mars_boost::move_detail::nat \
  64.                                  , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  65.                                  , ::mars_boost::move_detail::is_class<TYPE>\
  66.                                  , ::mars_boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
  67.                                  >::type* = 0)\
  68.          { return FWD_FUNCTION(u); }\
  69.          \
  70.          template<class BOOST_MOVE_TEMPL_PARAM>\
  71.          RETURN_VALUE PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u,\
  72.             typename ::mars_boost::move_detail::disable_if_or\
  73.                               < ::mars_boost::move_detail::nat \
  74.                               , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
  75.                               , ::mars_boost::move_detail::and_ \
  76.                                  < ::mars_boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \
  77.                                  , ::mars_boost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \
  78.                                  > \
  79.                               >::type* = 0)\
  80.          {\
  81.             TYPE t(u);\
  82.             return FWD_FUNCTION(::mars_boost::move(t));\
  83.          }\
  84.       //
  85.    #else
  86.       #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  87.          BOOST_MOVE_CONVERSION_AWARE_CATCH_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  88.          \
  89.          template<class BOOST_MOVE_TEMPL_PARAM>\
  90.          typename ::mars_boost::move_detail::enable_if_and\
  91.                                        < RETURN_VALUE \
  92.                                        , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  93.                                        , ::mars_boost::move_detail::is_class<TYPE>\
  94.                                        , ::mars_boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
  95.                                        >::type\
  96.             PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
  97.          { return FWD_FUNCTION(u); }\
  98.          \
  99.          template<class BOOST_MOVE_TEMPL_PARAM>\
  100.          typename ::mars_boost::move_detail::disable_if_or\
  101.                            < RETURN_VALUE \
  102.                            , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
  103.                            , ::mars_boost::move_detail::and_ \
  104.                               < ::mars_boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM> \
  105.                               , ::mars_boost::move_detail::is_class<BOOST_MOVE_TEMPL_PARAM> \
  106.                               > \
  107.                            >::type\
  108.             PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
  109.          {\
  110.             TYPE t(u);\
  111.             return FWD_FUNCTION(::mars_boost::move(t));\
  112.          }\
  113.       //
  114.    #endif
  115. #elif (defined(_MSC_VER) && (_MSC_VER == 1600))
  116.  
  117.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  118.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
  119.       {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
  120.       \
  121.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  122.       {  return FWD_FUNCTION(::mars_boost::move(x));  }\
  123.       \
  124.       template<class BOOST_MOVE_TEMPL_PARAM>\
  125.       typename ::mars_boost::move_detail::enable_if_c\
  126.                         < !::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>::value\
  127.                         , RETURN_VALUE >::type\
  128.       PUB_FUNCTION(const BOOST_MOVE_TEMPL_PARAM &u)\
  129.       {\
  130.          TYPE t(u);\
  131.          return FWD_FUNCTION(::mars_boost::move(t));\
  132.       }\
  133.    //
  134.  
  135. #else    //BOOST_NO_CXX11_RVALUE_REFERENCES
  136.  
  137.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION)\
  138.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_CONST(TYPE) x)\
  139.       {  return FWD_FUNCTION(static_cast<const TYPE&>(x)); }\
  140.       \
  141.       RETURN_VALUE PUB_FUNCTION(BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  142.       {  return FWD_FUNCTION(::mars_boost::move(x));  }\
  143.    //
  144.  
  145. #endif   //BOOST_NO_CXX11_RVALUE_REFERENCES
  146.  
  147. ////////////////////////////////////////
  148. //
  149. // BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG
  150. //
  151. ////////////////////////////////////////
  152.  
  153. #ifdef BOOST_NO_CXX11_RVALUE_REFERENCES
  154.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  155.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
  156.       {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
  157.       \
  158.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  159.       {  return FWD_FUNCTION(arg1, ::mars_boost::move(x));  }\
  160.       \
  161.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, TYPE &x)\
  162.       {  return FWD_FUNCTION(arg1, const_cast<const TYPE &>(x)); }\
  163.    //
  164.    #if defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
  165.       #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  166.          BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  167.          \
  168.          template<class BOOST_MOVE_TEMPL_PARAM>\
  169.          RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\
  170.             typename ::mars_boost::move_detail::enable_if_and\
  171.                               < ::mars_boost::move_detail::nat \
  172.                               , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  173.                               , ::mars_boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
  174.                               >::type* = 0)\
  175.          { return FWD_FUNCTION(arg1, u); }\
  176.          \
  177.          template<class BOOST_MOVE_TEMPL_PARAM>\
  178.          RETURN_VALUE PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u,\
  179.             typename ::mars_boost::move_detail::disable_if_or\
  180.                               < void \
  181.                               , ::mars_boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\
  182.                               , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  183.                               , ::mars_boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\
  184.                               >::type* = 0)\
  185.          {\
  186.             TYPE t(u);\
  187.             return FWD_FUNCTION(arg1, ::mars_boost::move(t));\
  188.          }\
  189.       //
  190.    #else
  191.       #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  192.          BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG_COMMON(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  193.          \
  194.          template<class BOOST_MOVE_TEMPL_PARAM>\
  195.          typename ::mars_boost::move_detail::enable_if_and\
  196.                            < RETURN_VALUE \
  197.                            , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  198.                            , ::mars_boost::has_move_emulation_disabled<BOOST_MOVE_TEMPL_PARAM>\
  199.                            >::type\
  200.             PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
  201.          { return FWD_FUNCTION(arg1, u); }\
  202.          \
  203.          template<class BOOST_MOVE_TEMPL_PARAM>\
  204.          typename ::mars_boost::move_detail::disable_if_or\
  205.                            < RETURN_VALUE \
  206.                            , ::mars_boost::move_detail::is_rv<BOOST_MOVE_TEMPL_PARAM>\
  207.                            , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM>\
  208.                            , ::mars_boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO>\
  209.                            >::type\
  210.             PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
  211.          {\
  212.             TYPE t(u);\
  213.             return FWD_FUNCTION(arg1, ::mars_boost::move(t));\
  214.          }\
  215.       //
  216.    #endif
  217.  
  218. #elif (defined(_MSC_VER) && (_MSC_VER == 1600))
  219.  
  220.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  221.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
  222.       {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
  223.       \
  224.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  225.       {  return FWD_FUNCTION(arg1, ::mars_boost::move(x));  }\
  226.       \
  227.       template<class BOOST_MOVE_TEMPL_PARAM>\
  228.       typename ::mars_boost::move_detail::disable_if_or\
  229.                         < RETURN_VALUE \
  230.                         , ::mars_boost::move_detail::is_same<TYPE, BOOST_MOVE_TEMPL_PARAM> \
  231.                         , ::mars_boost::move_detail::is_convertible<BOOST_MOVE_TEMPL_PARAM, UNLESS_CONVERTIBLE_TO> \
  232.                         >::type\
  233.       PUB_FUNCTION(ARG1 arg1, const BOOST_MOVE_TEMPL_PARAM &u)\
  234.       {\
  235.          TYPE t(u);\
  236.          return FWD_FUNCTION(arg1, ::mars_boost::move(t));\
  237.       }\
  238.    //
  239.  
  240. #else
  241.  
  242.    #define BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(PUB_FUNCTION, TYPE, RETURN_VALUE, FWD_FUNCTION, ARG1, UNLESS_CONVERTIBLE_TO)\
  243.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_CONST(TYPE) x)\
  244.       {  return FWD_FUNCTION(arg1, static_cast<const TYPE&>(x)); }\
  245.       \
  246.       RETURN_VALUE PUB_FUNCTION(ARG1 arg1, BOOST_MOVE_CATCH_RVALUE(TYPE) x) \
  247.       {  return FWD_FUNCTION(arg1, ::mars_boost::move(x));  }\
  248.    //
  249.  
  250. #endif
  251.  
  252. #endif //#ifndef BOOST_MOVE_MOVE_HELPERS_HPP
  253.  
downloadmove_helpers.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