remove_member_reference.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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_reference.hpp>
  10. #include "test.hpp"
  11. #ifdef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS
  12. int main(){ return 0; }
  13. #else
  14. struct foo{};
  15. int main() {
  16. {
  17. using f = void(foo::*)();
  18. using l = void(foo::*)() &;
  19. using r = void(foo::*)() &&;
  20. using c = void(foo::*)() const;
  21. using cl = void(foo::*)() const &;
  22. using cr = void(foo::*)() const &&;
  23. using v = void(foo::*)() volatile;
  24. using vl = void(foo::*)() volatile &;
  25. using vr = void(foo::*)() volatile &&;
  26. using cv = void(foo::*)() const volatile;
  27. using cvl = void(foo::*)() const volatile &;
  28. using cvr = void(foo::*)() const volatile &&;
  29. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, f)>{});
  30. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, c)>{});
  31. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, v)>{});
  32. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cv)>{});
  33. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, l)>{});
  34. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, cl)>{});
  35. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, vl)>{});
  36. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cvl)>{});
  37. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, r)>{});
  38. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, cr)>{});
  39. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, vr)>{});
  40. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cvr)>{});
  41. }
  42. {
  43. using f = void();
  44. using l = void() &;
  45. using r = void() &&;
  46. using c = void() const;
  47. using cl = void() const &;
  48. using cr = void() const &&;
  49. using v = void() volatile;
  50. using vl = void() volatile &;
  51. using vr = void() volatile &&;
  52. using cv = void() const volatile;
  53. using cvl = void() const volatile &;
  54. using cvr = void() const volatile &&;
  55. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, f)>{});
  56. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, c)>{});
  57. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, v)>{});
  58. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cv)>{});
  59. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, l)>{});
  60. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, cl)>{});
  61. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, vl)>{});
  62. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cvl)>{});
  63. CT_ASSERT(std::is_same<f, TRAIT(remove_member_reference, r)>{});
  64. CT_ASSERT(std::is_same<c, TRAIT(remove_member_reference, cr)>{});
  65. CT_ASSERT(std::is_same<v, TRAIT(remove_member_reference, vr)>{});
  66. CT_ASSERT(std::is_same<cv, TRAIT(remove_member_reference, cvr)>{});
  67. }
  68. }
  69. #endif //#ifndef BOOST_CLBL_TRTS_DISABLE_REFERENCE_QUALIFIERS