apply_member_pointer_pmf.cpp 8.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*<-
  2. Copyright (c) 2016 arett Adair
  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 <boost/callable_traits/apply_member_pointer.hpp>
  7. #include "test.hpp"
  8. struct a;
  9. struct b;
  10. template<typename Input, typename Output>
  11. void test_case() {
  12. assert_same< TRAIT(apply_member_pointer, Input, b), Output>();
  13. }
  14. int main() {
  15. test_case<int(a::*)(), int(b::*)() >();
  16. test_case<int(a::*)() TX_SAFE, int(b::*)() TX_SAFE >();
  17. test_case<int(a::*)() LREF, int(b::*)() LREF >();
  18. test_case<int(a::*)() LREF TX_SAFE, int(b::*)() LREF TX_SAFE >();
  19. test_case<int(a::*)() RREF, int(b::*)() RREF >();
  20. test_case<int(a::*)() RREF TX_SAFE, int(b::*)() RREF TX_SAFE >();
  21. test_case<int(a::*)() const, int(b::*)() const >();
  22. test_case<int(a::*)() const TX_SAFE, int(b::*)() const TX_SAFE >();
  23. test_case<int(a::*)() const LREF, int(b::*)() const LREF >();
  24. test_case<int(a::*)() const LREF TX_SAFE, int(b::*)() const LREF TX_SAFE >();
  25. test_case<int(a::*)() const RREF, int(b::*)() const RREF >();
  26. test_case<int(a::*)() const RREF TX_SAFE, int(b::*)() const RREF TX_SAFE >();
  27. test_case<int(a::*)() volatile, int(b::*)() volatile >();
  28. test_case<int(a::*)() volatile TX_SAFE, int(b::*)() volatile TX_SAFE >();
  29. test_case<int(a::*)() volatile LREF, int(b::*)() volatile LREF >();
  30. test_case<int(a::*)() volatile LREF TX_SAFE, int(b::*)() volatile LREF TX_SAFE >();
  31. test_case<int(a::*)() volatile RREF, int(b::*)() volatile RREF >();
  32. test_case<int(a::*)() volatile RREF TX_SAFE, int(b::*)() volatile RREF TX_SAFE >();
  33. test_case<int(a::*)(int), int(b::*)(int) >();
  34. test_case<int(a::*)(int) TX_SAFE, int(b::*)(int) TX_SAFE >();
  35. test_case<int(a::*)(int) LREF, int(b::*)(int) LREF >();
  36. test_case<int(a::*)(int) LREF TX_SAFE, int(b::*)(int) LREF TX_SAFE >();
  37. test_case<int(a::*)(int) RREF, int(b::*)(int) RREF >();
  38. test_case<int(a::*)(int) RREF TX_SAFE, int(b::*)(int) RREF TX_SAFE >();
  39. test_case<int(a::*)(int) const, int(b::*)(int) const >();
  40. test_case<int(a::*)(int) const TX_SAFE, int(b::*)(int) const TX_SAFE >();
  41. test_case<int(a::*)(int) const LREF, int(b::*)(int) const LREF >();
  42. test_case<int(a::*)(int) const LREF TX_SAFE, int(b::*)(int) const LREF TX_SAFE >();
  43. test_case<int(a::*)(int) const RREF, int(b::*)(int) const RREF >();
  44. test_case<int(a::*)(int) const RREF TX_SAFE, int(b::*)(int) const RREF TX_SAFE >();
  45. test_case<int(a::*)(int) volatile, int(b::*)(int) volatile >();
  46. test_case<int(a::*)(int) volatile TX_SAFE, int(b::*)(int) volatile TX_SAFE >();
  47. test_case<int(a::*)(int) volatile LREF, int(b::*)(int) volatile LREF >();
  48. test_case<int(a::*)(int) volatile LREF TX_SAFE, int(b::*)(int) volatile LREF TX_SAFE >();
  49. test_case<int(a::*)(int) volatile RREF, int(b::*)(int) volatile RREF >();
  50. test_case<int(a::*)(int) volatile RREF TX_SAFE, int(b::*)(int) volatile RREF TX_SAFE >();
  51. test_case<int(VA_CC a::*)(...), int(VA_CC b::*)(...) >();
  52. test_case<int(VA_CC a::*)(...) TX_SAFE, int(VA_CC b::*)(...) TX_SAFE >();
  53. test_case<int(VA_CC a::*)(...) LREF, int(VA_CC b::*)(...) LREF >();
  54. test_case<int(VA_CC a::*)(...) LREF TX_SAFE, int(VA_CC b::*)(...) LREF TX_SAFE >();
  55. test_case<int(VA_CC a::*)(...) RREF, int(VA_CC b::*)(...) RREF >();
  56. test_case<int(VA_CC a::*)(...) RREF TX_SAFE, int(VA_CC b::*)(...) RREF TX_SAFE >();
  57. test_case<int(VA_CC a::*)(...) const, int(VA_CC b::*)(...) const >();
  58. test_case<int(VA_CC a::*)(...) const TX_SAFE, int(VA_CC b::*)(...) const TX_SAFE >();
  59. test_case<int(VA_CC a::*)(...) const LREF, int(VA_CC b::*)(...) const LREF >();
  60. test_case<int(VA_CC a::*)(...) const LREF TX_SAFE, int(VA_CC b::*)(...) const LREF TX_SAFE >();
  61. test_case<int(VA_CC a::*)(...) const RREF, int(VA_CC b::*)(...) const RREF >();
  62. test_case<int(VA_CC a::*)(...) const RREF TX_SAFE, int(VA_CC b::*)(...) const RREF TX_SAFE >();
  63. test_case<int(VA_CC a::*)(...) volatile, int(VA_CC b::*)(...) volatile >();
  64. test_case<int(VA_CC a::*)(...) volatile TX_SAFE, int(VA_CC b::*)(...) volatile TX_SAFE >();
  65. test_case<int(VA_CC a::*)(...) volatile LREF, int(VA_CC b::*)(...) volatile LREF >();
  66. test_case<int(VA_CC a::*)(...) volatile LREF TX_SAFE, int(VA_CC b::*)(...) volatile LREF TX_SAFE >();
  67. test_case<int(VA_CC a::*)(...) volatile RREF, int(VA_CC b::*)(...) volatile RREF >();
  68. test_case<int(VA_CC a::*)(...) volatile RREF TX_SAFE, int(VA_CC b::*)(...) volatile RREF TX_SAFE >();
  69. test_case<int(VA_CC a::*)(int, ...), int(VA_CC b::*)(int, ...) >();
  70. test_case<int(VA_CC a::*)(int, ...) TX_SAFE, int(VA_CC b::*)(int, ...) TX_SAFE >();
  71. test_case<int(VA_CC a::*)(int, ...) LREF, int(VA_CC b::*)(int, ...) LREF >();
  72. test_case<int(VA_CC a::*)(int, ...) LREF TX_SAFE, int(VA_CC b::*)(int, ...) LREF TX_SAFE >();
  73. test_case<int(VA_CC a::*)(int, ...) RREF, int(VA_CC b::*)(int, ...) RREF >();
  74. test_case<int(VA_CC a::*)(int, ...) RREF TX_SAFE, int(VA_CC b::*)(int, ...) RREF TX_SAFE >();
  75. test_case<int(VA_CC a::*)(int, ...) const, int(VA_CC b::*)(int, ...) const >();
  76. test_case<int(VA_CC a::*)(int, ...) const TX_SAFE, int(VA_CC b::*)(int, ...) const TX_SAFE >();
  77. test_case<int(VA_CC a::*)(int, ...) const LREF, int(VA_CC b::*)(int, ...) const LREF >();
  78. test_case<int(VA_CC a::*)(int, ...) const LREF TX_SAFE, int(VA_CC b::*)(int, ...) const LREF TX_SAFE >();
  79. test_case<int(VA_CC a::*)(int, ...) const RREF, int(VA_CC b::*)(int, ...) const RREF >();
  80. test_case<int(VA_CC a::*)(int, ...) const RREF TX_SAFE, int(VA_CC b::*)(int, ...) const RREF TX_SAFE >();
  81. test_case<int(VA_CC a::*)(int, ...) volatile, int(VA_CC b::*)(int, ...) volatile >();
  82. test_case<int(VA_CC a::*)(int, ...) volatile TX_SAFE, int(VA_CC b::*)(int, ...) volatile TX_SAFE >();
  83. test_case<int(VA_CC a::*)(int, ...) volatile LREF, int(VA_CC b::*)(int, ...) volatile LREF >();
  84. test_case<int(VA_CC a::*)(int, ...) volatile LREF TX_SAFE, int(VA_CC b::*)(int, ...) volatile LREF TX_SAFE >();
  85. test_case<int(VA_CC a::*)(int, ...) volatile RREF, int(VA_CC b::*)(int, ...) volatile RREF >();
  86. test_case<int(VA_CC a::*)(int, ...) volatile RREF TX_SAFE, int(VA_CC b::*)(int, ...) volatile RREF TX_SAFE >();
  87. }