this.hpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Copyright (C) 2009-2012 Lorenzo Caminiti
  2. // Distributed under the Boost Software License, Version 1.0
  3. // (see accompanying file LICENSE_1_0.txt or a copy at
  4. // http://www.boost.org/LICENSE_1_0.txt)
  5. // Home at http://www.boost.org/libs/local_function
  6. #ifndef BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_HPP_
  7. #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_HPP_
  8. #include <boost/local_function/detail/preprocessor/keyword/this.hpp>
  9. #include <boost/local_function/detail/preprocessor/keyword/const.hpp>
  10. #include <boost/local_function/detail/preprocessor/keyword/bind.hpp>
  11. #include <boost/local_function/detail/preprocessor/keyword/const_bind.hpp>
  12. #include <boost/preprocessor/control/iif.hpp>
  13. #include <boost/preprocessor/tuple/eat.hpp>
  14. #include <boost/preprocessor/facilities/empty.hpp>
  15. #include <boost/preprocessor/list/fold_left.hpp>
  16. // PRIVATE //
  17. #define \
  18. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_TYPED_EAT_(elem) \
  19. /* must be in separate macro to delay expansion */ \
  20. BOOST_PP_TUPLE_EAT(1) elem
  21. #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_TYPED_( \
  22. elem) \
  23. BOOST_PP_IIF(BOOST_PP_IS_UNARY(elem), \
  24. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_TYPED_EAT_ \
  25. , \
  26. BOOST_PP_TUPLE_REM(1) \
  27. )(elem)
  28. #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_VAR_( \
  29. s, error, elem) \
  30. BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_THIS_BACK( \
  31. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_TYPED_( \
  32. BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_BIND_REMOVE_FRONT( \
  33. BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_CONST_REMOVE_FRONT( \
  34. elem)))), \
  35. ERROR_use_this_underscore_instead_of_this BOOST_PP_EMPTY \
  36. , \
  37. error \
  38. )
  39. #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_( \
  40. s, error, elem) \
  41. BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_BIND_FRONT(elem), \
  42. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_VAR_ \
  43. , BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_CONST_BIND_FRONT( \
  44. elem), \
  45. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_VAR_ \
  46. , \
  47. error BOOST_PP_TUPLE_EAT(3) \
  48. ))(s, error, elem)
  49. // PUBLIC //
  50. #define BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS(sign) \
  51. BOOST_PP_LIST_FOLD_LEFT( \
  52. BOOST_LOCAL_FUNCTION_AUX_PP_DECL_TRAITS_SIGN_VALIDATE_THIS_, \
  53. BOOST_PP_EMPTY, sign)
  54. #endif // #include guard