is_member_function_pointer_cxx_11.hpp 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672
  1. // (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
  2. // Hinnant & John Maddock 2000.
  3. // Use, modification and distribution are subject to the Boost Software License,
  4. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  5. // http://www.boost.org/LICENSE_1_0.txt).
  6. //
  7. // See http://www.boost.org/libs/type_traits for most recent version including documentation.
  8. #ifndef BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED
  9. #define BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED
  10. #include <boost/type_traits/integral_constant.hpp>
  11. namespace boost {
  12. #ifdef _MSC_VER
  13. #define BOOST_TT_DEF_CALL __thiscall
  14. #else
  15. #define BOOST_TT_DEF_CALL
  16. #endif
  17. template <class T>
  18. struct is_member_function_pointer : public false_type {};
  19. template <class T>
  20. struct is_member_function_pointer<T const> : public is_member_function_pointer<T> {};
  21. template <class T>
  22. struct is_member_function_pointer<T volatile> : public is_member_function_pointer<T> {};
  23. template <class T>
  24. struct is_member_function_pointer<T const volatile> : public is_member_function_pointer<T> {};
  25. #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM)
  26. // MSVC can't handle noexcept(b) as a deduced template parameter
  27. // so we will have to write everything out :(
  28. #define BOOST_TT_NOEXCEPT_PARAM
  29. #define BOOST_TT_NOEXCEPT_DECL
  30. #elif defined(__cpp_noexcept_function_type)
  31. #define BOOST_TT_NOEXCEPT_PARAM , bool NE
  32. #define BOOST_TT_NOEXCEPT_DECL noexcept(NE)
  33. #else
  34. #define BOOST_TT_NOEXCEPT_PARAM
  35. #define BOOST_TT_NOEXCEPT_DECL
  36. #endif
  37. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  38. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  39. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  40. struct is_member_function_pointer<Ret (C::*)(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  41. // const qualified:
  42. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  43. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  44. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  45. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  46. // volatile:
  47. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  48. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  49. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  50. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  51. // const volatile
  52. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  53. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  54. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  55. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  56. // Reference qualified:
  57. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  58. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  59. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  60. struct is_member_function_pointer<Ret(C::*)(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  61. // const qualified:
  62. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  63. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  64. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  65. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  66. // volatile:
  67. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  68. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  69. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  70. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  71. // const volatile
  72. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  73. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  74. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  75. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  76. // rvalue reference qualified:
  77. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  78. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  79. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  80. struct is_member_function_pointer<Ret(C::*)(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  81. // const qualified:
  82. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  83. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  84. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  85. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  86. // volatile:
  87. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  88. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  89. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  90. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  91. // const volatile
  92. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  93. struct is_member_function_pointer<Ret (BOOST_TT_DEF_CALL C::*)(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  94. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  95. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  96. #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
  97. #ifdef __CLR_VER
  98. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  99. struct is_member_function_pointer<Ret (__clrcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  100. #endif
  101. #ifndef _M_AMD64
  102. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  103. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  104. #ifndef __CLR_VER
  105. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  106. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  107. #endif
  108. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  109. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  110. #endif
  111. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  112. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  113. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  114. #endif
  115. // const:
  116. #ifdef __CLR_VER
  117. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  118. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  119. #endif
  120. #ifndef _M_AMD64
  121. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  122. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  123. #ifndef __CLR_VER
  124. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  125. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  126. #endif
  127. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  128. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  129. #endif
  130. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  131. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  132. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  133. #endif
  134. // volatile:
  135. #ifdef __CLR_VER
  136. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  137. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  138. #endif
  139. #ifndef _M_AMD64
  140. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  141. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  142. #ifndef __CLR_VER
  143. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  144. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  145. #endif
  146. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  147. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  148. #endif
  149. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  150. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  151. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  152. #endif
  153. // const volatile:
  154. #ifdef __CLR_VER
  155. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  156. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  157. #endif
  158. #ifndef _M_AMD64
  159. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  160. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  161. #ifndef __CLR_VER
  162. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  163. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  164. #endif
  165. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  166. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  167. #endif
  168. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  169. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  170. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  171. #endif
  172. // reference qualified:
  173. #ifdef __CLR_VER
  174. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  175. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  176. #endif
  177. #ifndef _M_AMD64
  178. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  179. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  180. #ifndef __CLR_VER
  181. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  182. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  183. #endif
  184. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  185. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  186. #endif
  187. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  188. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  189. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  190. #endif
  191. // const:
  192. #ifdef __CLR_VER
  193. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  194. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  195. #endif
  196. #ifndef _M_AMD64
  197. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  198. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  199. #ifndef __CLR_VER
  200. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  201. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  202. #endif
  203. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  204. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  205. #endif
  206. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  207. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  208. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  209. #endif
  210. // volatile:
  211. #ifdef __CLR_VER
  212. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  213. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  214. #endif
  215. #ifndef _M_AMD64
  216. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  217. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  218. #ifndef __CLR_VER
  219. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  220. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  221. #endif
  222. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  223. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  224. #endif
  225. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  226. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  227. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  228. #endif
  229. // const volatile:
  230. #ifdef __CLR_VER
  231. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  232. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  233. #endif
  234. #ifndef _M_AMD64
  235. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  236. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  237. #ifndef __CLR_VER
  238. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  239. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  240. #endif
  241. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  242. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  243. #endif
  244. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  245. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  246. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  247. #endif
  248. // rvalue reference qualified:
  249. #ifdef __CLR_VER
  250. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  251. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  252. #endif
  253. #ifndef _M_AMD64
  254. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  255. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  256. #ifndef __CLR_VER
  257. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  258. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  259. #endif
  260. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  261. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  262. #endif
  263. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  264. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  265. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  266. #endif
  267. // const:
  268. #ifdef __CLR_VER
  269. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  270. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  271. #endif
  272. #ifndef _M_AMD64
  273. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  274. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  275. #ifndef __CLR_VER
  276. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  277. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  278. #endif
  279. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  280. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  281. #endif
  282. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  283. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  284. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  285. #endif
  286. // volatile:
  287. #ifdef __CLR_VER
  288. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  289. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  290. #endif
  291. #ifndef _M_AMD64
  292. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  293. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  294. #ifndef __CLR_VER
  295. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  296. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  297. #endif
  298. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  299. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  300. #endif
  301. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  302. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  303. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  304. #endif
  305. // const volatile:
  306. #ifdef __CLR_VER
  307. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  308. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  309. #endif
  310. #ifndef _M_AMD64
  311. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  312. struct is_member_function_pointer<Ret (__stdcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  313. #ifndef __CLR_VER
  314. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  315. struct is_member_function_pointer<Ret (__fastcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  316. #endif
  317. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  318. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  319. #endif
  320. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  321. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  322. struct is_member_function_pointer<Ret (__vectorcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  323. #endif
  324. #endif
  325. #if defined(BOOST_TT_NO_DEDUCED_NOEXCEPT_PARAM) && !defined(BOOST_TT_NO_NOEXCEPT_SEPARATE_TYPE)
  326. #undef BOOST_TT_NOEXCEPT_DECL
  327. #define BOOST_TT_NOEXCEPT_DECL noexcept
  328. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  329. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  330. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  331. struct is_member_function_pointer<Ret(C::*)(Args..., ...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  332. // const qualified:
  333. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  334. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  335. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  336. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  337. // volatile:
  338. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  339. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  340. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  341. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  342. // const volatile
  343. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  344. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  345. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  346. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  347. // Reference qualified:
  348. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  349. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  350. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  351. struct is_member_function_pointer<Ret(C::*)(Args..., ...)& BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  352. // const qualified:
  353. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  354. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  355. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  356. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  357. // volatile:
  358. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  359. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  360. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  361. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  362. // const volatile
  363. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  364. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  365. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  366. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile & BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  367. // rvalue reference qualified:
  368. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  369. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  370. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  371. struct is_member_function_pointer<Ret(C::*)(Args..., ...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  372. // const qualified:
  373. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  374. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  375. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  376. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  377. // volatile:
  378. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  379. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  380. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  381. struct is_member_function_pointer<Ret(C::*)(Args..., ...)volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  382. // const volatile
  383. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  384. struct is_member_function_pointer<Ret(BOOST_TT_DEF_CALL C::*)(Args...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  385. template <class Ret, class C, class ...Args BOOST_TT_NOEXCEPT_PARAM>
  386. struct is_member_function_pointer<Ret(C::*)(Args..., ...)const volatile && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  387. #if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64)
  388. #ifdef __CLR_VER
  389. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  390. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  391. #endif
  392. #ifndef _M_AMD64
  393. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  394. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  395. #ifndef __CLR_VER
  396. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  397. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  398. #endif
  399. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  400. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  401. #endif
  402. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  403. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  404. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  405. #endif
  406. // const:
  407. #ifdef __CLR_VER
  408. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  409. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  410. #endif
  411. #ifndef _M_AMD64
  412. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  413. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  414. #ifndef __CLR_VER
  415. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  416. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  417. #endif
  418. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  419. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  420. #endif
  421. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  422. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  423. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  424. #endif
  425. // volatile:
  426. #ifdef __CLR_VER
  427. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  428. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  429. #endif
  430. #ifndef _M_AMD64
  431. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  432. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  433. #ifndef __CLR_VER
  434. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  435. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  436. #endif
  437. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  438. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  439. #endif
  440. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  441. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  442. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  443. #endif
  444. // const volatile:
  445. #ifdef __CLR_VER
  446. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  447. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  448. #endif
  449. #ifndef _M_AMD64
  450. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  451. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  452. #ifndef __CLR_VER
  453. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  454. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  455. #endif
  456. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  457. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  458. #endif
  459. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  460. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  461. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  462. #endif
  463. // reference qualified:
  464. #ifdef __CLR_VER
  465. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  466. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  467. #endif
  468. #ifndef _M_AMD64
  469. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  470. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  471. #ifndef __CLR_VER
  472. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  473. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  474. #endif
  475. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  476. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  477. #endif
  478. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  479. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  480. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  481. #endif
  482. // const:
  483. #ifdef __CLR_VER
  484. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  485. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  486. #endif
  487. #ifndef _M_AMD64
  488. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  489. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  490. #ifndef __CLR_VER
  491. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  492. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  493. #endif
  494. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  495. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  496. #endif
  497. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  498. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  499. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  500. #endif
  501. // volatile:
  502. #ifdef __CLR_VER
  503. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  504. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  505. #endif
  506. #ifndef _M_AMD64
  507. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  508. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  509. #ifndef __CLR_VER
  510. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  511. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  512. #endif
  513. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  514. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  515. #endif
  516. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  517. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  518. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  519. #endif
  520. // const volatile:
  521. #ifdef __CLR_VER
  522. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  523. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  524. #endif
  525. #ifndef _M_AMD64
  526. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  527. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  528. #ifndef __CLR_VER
  529. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  530. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  531. #endif
  532. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  533. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  534. #endif
  535. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  536. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  537. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile &BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  538. #endif
  539. // rvalue reference qualified:
  540. #ifdef __CLR_VER
  541. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  542. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  543. #endif
  544. #ifndef _M_AMD64
  545. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  546. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  547. #ifndef __CLR_VER
  548. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  549. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  550. #endif
  551. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  552. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  553. #endif
  554. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  555. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  556. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...) && BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  557. #endif
  558. // const:
  559. #ifdef __CLR_VER
  560. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  561. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  562. #endif
  563. #ifndef _M_AMD64
  564. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  565. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  566. #ifndef __CLR_VER
  567. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  568. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  569. #endif
  570. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  571. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  572. #endif
  573. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  574. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  575. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  576. #endif
  577. // volatile:
  578. #ifdef __CLR_VER
  579. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  580. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  581. #endif
  582. #ifndef _M_AMD64
  583. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  584. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  585. #ifndef __CLR_VER
  586. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  587. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  588. #endif
  589. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  590. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  591. #endif
  592. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  593. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  594. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  595. #endif
  596. // const volatile:
  597. #ifdef __CLR_VER
  598. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  599. struct is_member_function_pointer<Ret(__clrcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  600. #endif
  601. #ifndef _M_AMD64
  602. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  603. struct is_member_function_pointer<Ret(__stdcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  604. #ifndef __CLR_VER
  605. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  606. struct is_member_function_pointer<Ret(__fastcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  607. #endif
  608. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  609. struct is_member_function_pointer<Ret(__cdecl C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  610. #endif
  611. #if !defined(__CLR_VER) && (defined(_M_IX86_FP) && (_M_IX86_FP >= 2) || defined(_M_X64))
  612. template <class Ret, class C, class...Args BOOST_TT_NOEXCEPT_PARAM>
  613. struct is_member_function_pointer<Ret(__vectorcall C::*)(Args...)const volatile &&BOOST_TT_NOEXCEPT_DECL> : public true_type {};
  614. #endif
  615. #endif
  616. #endif
  617. #undef BOOST_TT_NOEXCEPT_DECL
  618. #undef BOOST_TT_NOEXCEPT_PARAM
  619. #undef BOOST_TT_DEF_CALL
  620. }
  621. #endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_CXX_11_HPP_INCLUDED