remove_member_const.cpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. Copyright Barrett Adair 2016-2017
  3. Distributed under the Boost Software License, Version 1.0.
  4. (See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt)
  5. */
  6. #include <type_traits>
  7. #include <functional>
  8. #include <tuple>
  9. #include <boost/callable_traits/remove_member_const.hpp>
  10. #include "test.hpp"
  11. struct foo {};
  12. int main() {
  13. {
  14. using f = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...);
  15. using l = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) LREF;
  16. using r = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) RREF ;
  17. using c = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const;
  18. using cl = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const LREF;
  19. using cr = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const RREF;
  20. using v = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) volatile;
  21. using vl = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) volatile LREF;
  22. using vr = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) volatile RREF;
  23. using cv = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const volatile;
  24. using cvl = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const volatile LREF;
  25. using cvr = void(BOOST_CLBL_TRTS_DEFAULT_VARARGS_CC foo::*)(...) const volatile RREF;
  26. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, f)>{});
  27. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, c)>{});
  28. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, l)>{});
  29. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, cl)>{});
  30. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, r)>{});
  31. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, cr)>{});
  32. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, v)>{});
  33. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, cv)>{});
  34. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, vl)>{});
  35. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, cvl)>{});
  36. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, vr)>{});
  37. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, cvr)>{});
  38. }
  39. {
  40. using f = foo const & (foo::*)(int, int);
  41. using l = foo const & (foo::*)(int, int) LREF;
  42. using r = foo const & (foo::*)(int, int) RREF ;
  43. using c = foo const & (foo::*)(int, int) const;
  44. using cl = foo const & (foo::*)(int, int) const LREF;
  45. using cr = foo const & (foo::*)(int, int) const RREF;
  46. using v = foo const & (foo::*)(int, int) volatile;
  47. using vl = foo const & (foo::*)(int, int) volatile LREF;
  48. using vr = foo const & (foo::*)(int, int) volatile RREF;
  49. using cv = foo const & (foo::*)(int, int) const volatile;
  50. using cvl = foo const & (foo::*)(int, int) const volatile LREF;
  51. using cvr = foo const & (foo::*)(int, int) const volatile RREF;
  52. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, f)>{});
  53. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, c)>{});
  54. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, l)>{});
  55. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, cl)>{});
  56. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, r)>{});
  57. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, cr)>{});
  58. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, v)>{});
  59. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, cv)>{});
  60. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, vl)>{});
  61. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, cvl)>{});
  62. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, vr)>{});
  63. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, cvr)>{});
  64. }
  65. #ifndef BOOST_CLBL_TRTS_DISABLE_ABOMINABLE_FUNCTIONS
  66. {
  67. using f = void();
  68. using l = void() LREF;
  69. using r = void() RREF ;
  70. using c = void() const;
  71. using cl = void() const LREF;
  72. using cr = void() const RREF;
  73. using v = void() volatile;
  74. using vl = void() volatile LREF;
  75. using vr = void() volatile RREF;
  76. using cv = void() const volatile;
  77. using cvl = void() const volatile LREF;
  78. using cvr = void() const volatile RREF;
  79. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, f)>{});
  80. CT_ASSERT(std::is_same<f, TRAIT(remove_member_const, c)>{});
  81. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, l)>{});
  82. CT_ASSERT(std::is_same<l, TRAIT(remove_member_const, cl)>{});
  83. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, r)>{});
  84. CT_ASSERT(std::is_same<r, TRAIT(remove_member_const, cr)>{});
  85. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, v)>{});
  86. CT_ASSERT(std::is_same<v, TRAIT(remove_member_const, cv)>{});
  87. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, vl)>{});
  88. CT_ASSERT(std::is_same<vl, TRAIT(remove_member_const, cvl)>{});
  89. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, vr)>{});
  90. CT_ASSERT(std::is_same<vr, TRAIT(remove_member_const, cvr)>{});
  91. }
  92. #endif
  93. }