1#ifndef _STDEX_TYPE_TRAITS_H
2#define _STDEX_TYPE_TRAITS_H
31#include "./cstdint.hpp"
46 namespace type_traits_asserts
49 struct make_signed_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert;
52 struct make_unsigned_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert;
55 struct not_allowed_arithmetic_type_assert;
58 struct alignment_of_type_can_not_be_zero_assert;
61 struct make_signed_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert<true>
63 typedef bool make_signed_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert_failed;
67 struct make_unsigned_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert<true>
69 typedef bool make_unsigned_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert_failed;
73 struct not_allowed_arithmetic_type_assert<true>
75 typedef bool not_allowed_arithmetic_type_assert_failed;
79 struct alignment_of_type_can_not_be_zero_assert<true>
81 typedef bool alignment_of_type_can_not_be_zero_assert_failed;
86 template<
class _Tp, _Tp Val>
87 struct integral_constant
89 static const _Tp value = Val;
91 typedef const _Tp value_type;
92 typedef integral_constant<_Tp, Val> type;
94 operator value_type()
const
99 value_type operator()()
const
105 typedef integral_constant<bool, true> true_type;
106 typedef integral_constant<bool, false> false_type;
109 struct bool_constant :
110 public integral_constant<bool, Val>
115 template<
bool _Cond,
class _Iftrue,
class _Iffalse>
118 typedef _Iftrue type;
122 template<
class _Iftrue,
class _Iffalse>
123 struct conditional<false, _Iftrue, _Iffalse>
125 typedef _Iffalse type;
136 typedef char _yes_type;
145 template<
class _B1 =
void_type,
class _B2 =
void_type,
class _B3 =
void_type,
class _B4 =
void_type,
class _B5 =
void_type,
class _B6 =
void_type>
147 public conditional<_B1::value, _B1, _or_<_B2, _or_<_B3, _or_<_B4, _or_<_B5, _B6> > > > >::type
152 struct _or_<void_type, void_type, void_type, void_type, void_type, void_type>;
155 struct _or_<_B1, void_type, void_type, void_type, void_type, void_type> :
159 template<
class _B1,
class _B2>
160 struct _or_<_B1, _B2, void_type, void_type, void_type, void_type> :
161 public conditional<_B1::value, _B1, _B2>::type
164 template<
class _B1,
class _B2,
class _B3>
165 struct _or_<_B1, _B2, _B3, void_type, void_type, void_type> :
166 public conditional<_B1::value, _B1, _or_<_B2, _B3> >::type
169 template<
class _B1,
class _B2,
class _B3,
class _B4>
170 struct _or_<_B1, _B2, _B3, _B4, void_type, void_type> :
171 public conditional<_B1::value, _B1, _or_<_B2, _or_<_B3, _B4> > >::type
174 template<
class _B1,
class _B2,
class _B3,
class _B4,
class _B5>
175 struct _or_<_B1, _B2, _B3, _B4, _B5, void_type> :
176 public conditional<_B1::value, _B1, _or_<_B2, _or_<_B3, _or_<_B4, _B5> > > >::type
179 template<
class _B1 =
void_type,
class _B2 =
void_type,
class _B3 =
void_type,
class _B4 =
void_type>
184 struct _and_<void_type, void_type, void_type, void_type>;
187 struct _and_<_B1, void_type, void_type, void_type> :
191 template<
class _B1,
class _B2>
192 struct _and_<_B1, _B2, void_type, void_type> :
193 public conditional<_B1::value, _B2, _B1>::type
196 template<
class _B1,
class _B2,
class _B3>
197 struct _and_<_B1, _B2, _B3, void_type> :
198 public conditional<_B1::value, _and_<_B2, _B3>, _B1>::type
203 conditional<_Pp::value, false_type, true_type>::type
211 integral_constant<bool, Val>
226 struct remove_const<const _Tp>
232 struct remove_const<const volatile _Tp>
234 typedef volatile _Tp type;
239 struct remove_volatile
245 struct remove_volatile<volatile _Tp>
254 typedef typename remove_const<typename remove_volatile<_Tp>::type>::type
260 template<
class _Tp,
bool _IsFunction>
261 struct _add_const_helper
263 typedef _Tp
const type;
267 struct _add_const_helper<_Tp, true>
272 template<
class _Tp,
bool _IsFunction>
273 struct _add_volatile_helper
275 typedef _Tp
volatile type;
279 struct _add_volatile_helper<_Tp, true>
284 template<
class _Tp,
bool _IsFunction>
285 struct _add_cv_helper
287 typedef _Tp
const volatile type;
291 struct _add_cv_helper<_Tp, true>
300 public detail::_add_const_helper<_Tp, is_function<_Tp>::value>
305 struct add_const<_Tp&>
312 struct add_volatile :
313 public detail::_add_volatile_helper<_Tp, is_function<_Tp>::value>
318 struct add_volatile<_Tp&>
326 public detail::_add_cv_helper<_Tp, is_function<_Tp>::value>
338 template <
class>
struct _is_floating_point :
public false_type {};
340 template<>
struct _is_floating_point<float> :
public true_type {};
341 template<>
struct _is_floating_point<double> :
public true_type {};
342 template<>
struct _is_floating_point<long double> :
public true_type {};
344 namespace type_traits_detail
346 template<
class _Tp>
struct _is_integral_cstdint_type_helper:
public true_type {};
347 template<>
struct _is_integral_cstdint_type_helper<void>:
public false_type {};
348 template<
class _Tp>
struct _is_integral_cstdint_type: _is_integral_cstdint_type_helper<_Tp> {};
349 template<>
struct _is_integral_cstdint_type<cstdint_detail::_cstdint_invalid_type>:
public false_type {};
352 enum {_is_integral_rank = __LINE__};
353 template <
int,
class>
struct _is_integral_map :
public false_type {};
355 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), bool> :
public true_type {};
356 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), char> :
public true_type {};
357 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), wchar_t> :
public true_type {};
359 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), unsigned char> :
public true_type {};
360 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), unsigned short int> :
public true_type {};
361 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), unsigned int> :
public true_type {};
362 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), unsigned long int> :
public true_type {};
364 #if defined(ULLONG_MAX)
365 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), unsigned long long int> :
public true_type {};
368 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), signed char> :
public true_type {};
369 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), short int> :
public true_type {};
370 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), int> :
public true_type {};
371 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), long int> :
public true_type {};
373 #if defined(LLONG_MIN) && defined(LLONG_MAX)
374 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), long long int> :
public true_type {};
377 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex_char16_t> :
public true_type {};
378 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex_char32_t> :
public true_type {};
381 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int_least8_t> : _is_integral_cstdint_type<stdex::int_least8_t> {};
382 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint_least8_t> : _is_integral_cstdint_type<stdex::uint_least8_t> {};
383 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int_least16_t> : _is_integral_cstdint_type<stdex::int_least16_t> {};
384 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint_least16_t> : _is_integral_cstdint_type<stdex::uint_least16_t> {};
385 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int_least32_t> : _is_integral_cstdint_type<stdex::int_least32_t> {};
386 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint_least32_t> : _is_integral_cstdint_type<stdex::uint_least32_t> {};
387 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int_least64_t> : _is_integral_cstdint_type<stdex::int_least64_t> {};
388 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint_least64_t> : _is_integral_cstdint_type<stdex::uint_least64_t> {};
389 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::intmax_t> : _is_integral_cstdint_type<stdex::intmax_t> {};
390 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uintmax_t> : _is_integral_cstdint_type<stdex::uintmax_t> {};
391 #if defined(STDEX_INT8_MIN) && defined(STDEX_INT8_MAX) && defined(STDEX_UINT8_MAX)
392 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int8_t> : _is_integral_cstdint_type<stdex::int8_t> {};
393 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint8_t> : _is_integral_cstdint_type<stdex::uint8_t> {};
395 #if defined(STDEX_INT16_MIN) && defined(STDEX_INT16_MAX) && defined(STDEX_UINT16_MAX)
396 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int16_t> : _is_integral_cstdint_type<stdex::int16_t> {};
397 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint16_t> : _is_integral_cstdint_type<stdex::uint16_t> {};
399 #if defined(STDEX_INT32_MIN) && defined(STDEX_INT32_MAX) && defined(STDEX_UINT32_MAX)
400 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int32_t> : _is_integral_cstdint_type<stdex::int32_t> {};
401 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint32_t> : _is_integral_cstdint_type<stdex::uint32_t> {};
403 #if defined(STDEX_INT64_MIN) && defined(STDEX_INT64_MAX) && defined(STDEX_UINT64_MAX)
404 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::int64_t> : _is_integral_cstdint_type<stdex::int64_t> {};
405 template<>
struct _is_integral_map<(__LINE__ - _is_integral_rank), stdex::uint64_t> : _is_integral_cstdint_type<stdex::uint64_t> {};
408 enum {_is_integral_max_rank = (__LINE__ - _is_integral_rank + 1)};
410 template<class _Tp, int _RankIt = 0, bool _IsFound = _is_integral_map<0, _Tp>::value>
411 struct _is_integral_search:
412 _is_integral_search<_Tp, _RankIt + 1, _is_integral_map<_RankIt + 1, _Tp>::value>{};
415 struct _is_integral_search<_Tp, _is_integral_max_rank, false>:
416 _is_integral_map<_is_integral_max_rank, _Tp>{};
418 template<
class _Tp,
int _RankIt>
419 struct _is_integral_search<_Tp, _RankIt, true>:
420 _is_integral_map<_RankIt, _Tp>{};
423 struct _is_integral_constant:
424 bool_constant<cstdint_detail::_is_integral_constant<_Tp>::value>
427 template <
class _Tp,
bool _IsFound>
428 struct _is_integral_impl:
433 struct _is_integral_impl<_Tp, true>:
434 _is_integral_constant<_Tp>
438 template <
class _Tp>
struct _is_integral :
439 public type_traits_detail::_is_integral_impl<_Tp, type_traits_detail::_is_integral_search<_Tp>::value> {};
444 struct is_floating_point :
445 public detail::_is_floating_point<typename remove_cv<_Tp>::type>
450 public detail::_is_integral<typename remove_cv<_Tp>::type>
455 template<
class _Tp,
bool>
456 struct _sign_unsign_chooser;
459 struct _signed_comparer
461 static const bool value = _Tp(-1) < _Tp(0);
465 struct _unsigned_comparer
467 static const bool value = _Tp(0) < _Tp(-1);
471 struct _sign_unsign_chooser<_Tp, true>
474 public _cat_base<_signed_comparer<typename remove_cv<_Tp>::type>::value>
479 public _cat_base<_unsigned_comparer<typename remove_cv<_Tp>::type>::value>
485 struct _sign_unsign_chooser<_Tp, false>
488 public is_floating_point<_Tp>
499 template <
bool,
class _Tp = detail::
void_type>
504 struct enable_if<true, _Tp>
509 template<
class,
class>
515 struct is_same<_Tp, _Tp> :
525 template<
class _Tp,
class>
526 struct _remove_pointer_helper
531 template<
class _Tp,
class _Up>
532 struct _remove_pointer_helper<_Tp, _Up*>
540 struct remove_pointer
541 :
public detail::_remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
547 struct _canonical_is_const:
552 struct _canonical_is_const<const _Tp>:
557 struct _canonical_is_volatile:
562 struct _canonical_is_volatile<volatile _Tp>:
566 template<
class _FuncT>
567 struct _canonical_is_function_const:
568 bool_constant<( _canonical_is_const<const _FuncT>::value == bool(false) )> { };
570 template<
class _FuncT>
571 struct _canonical_is_function_volatile:
572 bool_constant<( _canonical_is_volatile<volatile _FuncT>::value == bool(false) )> { };
581 struct _has_bug<class _stdex_array_can_not_be_const>
583 static const bool value =
584 detail::_canonical_is_const<const int[4]>::value == bool(
false);
588 struct _has_bug<class _stdex_array_can_not_be_volatile>
590 static const bool value =
591 detail::_canonical_is_volatile<volatile int[4]>::value == bool(
false);
595 struct _has_bug<class _stdex_array_can_not_be_cv_qualified>
597 static const bool value =
598 detail::_canonical_is_const<const volatile int[4]>::value == bool(
false) ||
599 detail::_canonical_is_volatile<const volatile int[4]>::value == bool(
false);
605 template<
class _NonConstT,
class _ConstT>
606 struct _is_const_impl_fallback:
607 bool_constant<( is_function<_NonConstT>::value == bool(false) )>
611 struct _is_const_impl_fallback<_Tp, _Tp>:
615 template<
class _Tp,
bool>
616 struct _is_const_impl:
621 struct _is_const_impl<_Tp, false>:
622 _is_const_impl_fallback<_Tp, const _Tp>
626 struct _is_const_impl<_Tp*,
false>:
633 template<
class _NonVolatileT,
class _VolatileT>
634 struct _is_volatile_impl_fallback:
635 bool_constant<( is_function<_NonVolatileT>::value == bool(false) )>
639 struct _is_volatile_impl_fallback<_Tp, _Tp>:
643 template<
class _Tp,
bool>
644 struct _is_volatile_impl:
649 struct _is_volatile_impl<_Tp, false>:
650 _is_volatile_impl_fallback<_Tp, volatile _Tp>
654 struct _is_volatile_impl<_Tp*,
false>:
665 struct is_const<const _Tp> :
666 public detail::_is_const_impl<_Tp, is_reference<_Tp>::value>
670 struct is_const<const volatile _Tp> :
671 public detail::_is_const_impl<volatile _Tp, is_reference<_Tp>::value>
682 :
public detail::_is_volatile_impl<_Tp, is_reference<_Tp>::value>
686 struct is_volatile<const volatile _Tp>
687 :
public detail::_is_volatile_impl<const _Tp, is_reference<_Tp>::value>
696 struct _is_referenceable :
697 public _or_<is_object<_Tp>, is_reference<_Tp>, is_function<_Tp> >::type
701 template<
class _Tp >
702 struct remove_reference
707 template<
class _Tp >
708 struct remove_reference<_Tp&>
715 template<class _Tp, bool = _is_referenceable<_Tp>::value>
716 struct _add_lvalue_reference_helper
722 struct _add_lvalue_reference_helper<_Tp, true>
730 struct add_lvalue_reference :
731 public detail::_add_lvalue_reference_helper<_Tp>
735 struct add_lvalue_reference<_Tp&>
743 struct is_signed_impl
745 typedef typename _sign_unsign_chooser<_Tp, is_integral<_Tp>::value>::_signed _chooser;
747 static const bool value = _chooser::value;
749 typedef typename conditional<_chooser::value, true_type, false_type >::type type;
753 struct is_unsigned_impl
755 typedef typename _sign_unsign_chooser<_Tp, is_integral<_Tp>::value>::_unsigned _chooser;
757 static const bool value = _chooser::value;
759 typedef typename conditional<_chooser::value, true_type, false_type >::type type;
765 detail::is_signed_impl<_Tp>::type
771 detail::is_unsigned_impl<_Tp>::type
778 struct _alignment_of_trick
782 _alignment_of_trick();
785 template <
unsigned _A,
unsigned _S>
786 struct _alignment_logic_helper
788 static const std::size_t value = (_A < _S ? _A : _S);
791 template <
unsigned _A>
792 struct _alignment_logic_helper<_A, 0>
794 static const std::size_t value = _A;
797 template <
unsigned _S>
798 struct _alignment_logic_helper<0, _S>
800 static const std::size_t value = _S;
804 struct _alignment_of_impl_logic
812 static const std::size_t value =
813 (_alignment_logic_helper<
814 (
sizeof(_alignment_of_trick<_Tp>) -
sizeof(_Tp) ),
818 static const std::size_t value =
819 (_alignment_logic_helper<
820 (
sizeof(_alignment_of_trick<_Tp>) -
sizeof(_Tp) ),
827 template<
class _Tp >
828 struct _alignment_of_impl
834 std::size_t(_alignment_of_impl_logic<_Tp>::value)
839 typedef typename intern::type_traits_asserts::alignment_of_type_can_not_be_zero_assert<bool( type::value != 0 )>::
840 alignment_of_type_can_not_be_zero_assert_failed
845 struct _long_double_wrapper{
long double value; };
848 struct _alignment_of_impl<long double>
850 typedef _alignment_of_impl<_long_double_wrapper>::type type;
854 struct _alignment_of_impl<const long double>:
855 _alignment_of_impl<long double>
859 struct _alignment_of_impl<volatile long double>:
860 _alignment_of_impl<long double>
864 struct _alignment_of_impl<const volatile long double>:
865 _alignment_of_impl<long double>
871 public detail::_alignment_of_impl<_Tp>::type
875 struct alignment_of<_Tp&>:
876 public alignment_of<_Tp*>
882 struct _is_void_helper
883 :
public false_type { };
886 struct _is_void_helper<void>
887 :
public true_type { };
890 _Tp (&_is_incomplete_type_tester_helper(
int))[1];
892 void* _is_incomplete_type_tester_helper(...);
894 _yes_type _is_incomplete_type_tester(
void*);
896 _no_type _is_incomplete_type_tester(_Tp(&)[1]);
899 struct _is_incomplete_type_helper
901 static const bool value =
sizeof(_is_incomplete_type_tester(_is_incomplete_type_tester_helper<_Tp>(0))) ==
sizeof(_yes_type);
905 struct _is_incomplete_type
907 static const bool value = _is_incomplete_type_helper<_Tp>::value;
908 typedef bool_constant<bool( _is_incomplete_type_helper<_Tp>::value ==
bool(
true) )> type;
912 struct _is_incomplete_type<void>:
917 struct _arr_is_incomplete_type:
918 _is_incomplete_type<_Tp[]>
922 struct _arr_is_incomplete_type<_Tp&>:
923 _is_incomplete_type<_Tp[]>
927 struct _arr_is_incomplete_type<void>:
928 _is_incomplete_type<void>
931 template<class _Tp, bool ImplCh = _arr_is_incomplete_type<char>::value>
932 struct _is_array_impl:
933 _and_<_is_incomplete_type<_Tp>, _not_<is_function<_Tp> > >::type
937 struct _is_array_impl<_Tp, false>:
942 struct _is_array_impl<_Tp[], false> :
950 public detail::_is_void_helper<typename remove_cv<_Tp>::type>::type
956 public detail::_is_array_impl<typename remove_cv<_Tp>::type>
959 template<
class _Tp, std::
size_t _Size>
960 struct is_array<_Tp[_Size]> :
961 public true_type { };
970 struct _is_pointer_helper :
971 public false_type { };
974 struct _is_pointer_helper<_Tp*> :
975 public true_type { };
981 public detail::_is_pointer_helper<typename remove_cv<_Tp>::type>::type
985 struct is_fundamental;
989 struct is_lvalue_reference :
990 public false_type { };
993 struct is_lvalue_reference<_Tp&> :
994 public true_type { };
998 template<
class _FuncPtrT>
999 struct _is_function_ptr_helper_fallback:
1003 template <
class _FuncPtrT>
1004 struct _is_function_ptr_helper_cdecl:
1005 _is_function_ptr_helper_fallback<_FuncPtrT>::type
1008 template <
class _FuncPtrT>
1009 struct _is_function_ptr_helper_fastcall : _is_function_ptr_helper_cdecl<_FuncPtrT> {};
1010 template <
class _FuncPtrT>
1011 struct _is_function_ptr_helper_stdcall : _is_function_ptr_helper_fastcall<_FuncPtrT> {};
1012 template <
class _FuncPtrT>
1013 struct _is_function_ptr_helper : _is_function_ptr_helper_stdcall<_FuncPtrT> {};
1015 template <
class _R >
1016 struct _is_function_ptr_helper<_R(*)()> : true_type {};
1017#ifdef _STDEX_STDCALL
1018 template <
class _R >
1019 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)() > : true_type {};
1021#ifdef _STDEX_FASTCALL
1022 template <
class _R >
1023 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)() > : true_type {};
1026 template <
class _R >
1027 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)() > : true_type {};
1030 template <
class _R >
1031 struct _is_function_ptr_helper<_R(*)(...)> : true_type {};
1032#ifdef _STDEX_STDCALL
1033 template <
class _R >
1034 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(...) > : true_type {};
1036#ifdef _STDEX_FASTCALL
1037 template <
class _R >
1038 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(...) > : true_type {};
1041 template <
class _R >
1042 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(...) > : true_type {};
1045 template <
class _R,
class _T0>
1046 struct _is_function_ptr_helper<_R(*)(_T0)> : true_type {};
1047#ifdef _STDEX_STDCALL
1048 template <
class _R,
class _T0>
1049 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0) > : true_type {};
1051#ifdef _STDEX_FASTCALL
1052 template <
class _R,
class _T0>
1053 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0) > : true_type {};
1056 template <
class _R,
class _T0>
1057 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0) > : true_type {};
1060 template <
class _R,
class _T0>
1061 struct _is_function_ptr_helper<_R(*)(_T0 ...)> : true_type {};
1062#ifdef _STDEX_STDCALL
1063 template <
class _R,
class _T0>
1064 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0 ...) > : true_type {};
1066#ifdef _STDEX_FASTCALL
1067 template <
class _R,
class _T0>
1068 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0 ...) > : true_type {};
1071 template <
class _R,
class _T0>
1072 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0 ...) > : true_type {};
1075 template <
class _R,
class _T0,
class _T1>
1076 struct _is_function_ptr_helper<_R(*)(_T0, _T1)> : true_type {};
1077#ifdef _STDEX_STDCALL
1078 template <
class _R,
class _T0,
class _T1>
1079 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1) > : true_type {};
1081#ifdef _STDEX_FASTCALL
1082 template <
class _R,
class _T0,
class _T1>
1083 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1) > : true_type {};
1086 template <
class _R,
class _T0,
class _T1>
1087 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1) > : true_type {};
1090 template <
class _R,
class _T0,
class _T1>
1091 struct _is_function_ptr_helper<_R(*)(_T0, _T1 ...)> : true_type {};
1092#ifdef _STDEX_STDCALL
1093 template <
class _R,
class _T0,
class _T1>
1094 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1 ...) > : true_type {};
1096#ifdef _STDEX_FASTCALL
1097 template <
class _R,
class _T0,
class _T1>
1098 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1 ...) > : true_type {};
1101 template <
class _R,
class _T0,
class _T1>
1102 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1 ...) > : true_type {};
1105 template <
class _R,
class _T0,
class _T1,
class _T2>
1106 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2)> : true_type {};
1107#ifdef _STDEX_STDCALL
1108 template <
class _R,
class _T0,
class _T1,
class _T2>
1109 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2) > : true_type {};
1111#ifdef _STDEX_FASTCALL
1112 template <
class _R,
class _T0,
class _T1,
class _T2>
1113 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2) > : true_type {};
1116 template <
class _R,
class _T0,
class _T1,
class _T2>
1117 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2) > : true_type {};
1120 template <
class _R,
class _T0,
class _T1,
class _T2>
1121 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2 ...)> : true_type {};
1122#ifdef _STDEX_STDCALL
1123 template <
class _R,
class _T0,
class _T1,
class _T2>
1124 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2 ...) > : true_type {};
1126#ifdef _STDEX_FASTCALL
1127 template <
class _R,
class _T0,
class _T1,
class _T2>
1128 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2 ...) > : true_type {};
1131 template <
class _R,
class _T0,
class _T1,
class _T2>
1132 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2 ...) > : true_type {};
1135 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1136 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3)> : true_type {};
1137#ifdef _STDEX_STDCALL
1138 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1139 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3) > : true_type {};
1141#ifdef _STDEX_FASTCALL
1142 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1143 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3) > : true_type {};
1146 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1147 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3) > : true_type {};
1150 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1151 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3 ...)> : true_type {};
1152#ifdef _STDEX_STDCALL
1153 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1154 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3 ...) > : true_type {};
1156#ifdef _STDEX_FASTCALL
1157 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1158 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3 ...) > : true_type {};
1161 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3>
1162 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3 ...) > : true_type {};
1165 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1166 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4)> : true_type {};
1167#ifdef _STDEX_STDCALL
1168 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1169 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4) > : true_type {};
1171#ifdef _STDEX_FASTCALL
1172 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1173 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4) > : true_type {};
1176 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1177 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4) > : true_type {};
1180 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1181 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4 ...)> : true_type {};
1182#ifdef _STDEX_STDCALL
1183 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1184 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4 ...) > : true_type {};
1186#ifdef _STDEX_FASTCALL
1187 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1188 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4 ...) > : true_type {};
1191 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4>
1192 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4 ...) > : true_type {};
1195 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1196 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5)> : true_type {};
1197#ifdef _STDEX_STDCALL
1198 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1199 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5) > : true_type {};
1201#ifdef _STDEX_FASTCALL
1202 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1203 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5) > : true_type {};
1206 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1207 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5) > : true_type {};
1210 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1211 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5 ...)> : true_type {};
1212#ifdef _STDEX_STDCALL
1213 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1214 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5 ...) > : true_type {};
1216#ifdef _STDEX_FASTCALL
1217 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1218 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5 ...) > : true_type {};
1221 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5>
1222 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5 ...) > : true_type {};
1225 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1226 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6)> : true_type {};
1227#ifdef _STDEX_STDCALL
1228 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1229 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6) > : true_type {};
1231#ifdef _STDEX_FASTCALL
1232 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1233 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6) > : true_type {};
1236 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1237 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6) > : true_type {};
1240 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1241 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6 ...)> : true_type {};
1242#ifdef _STDEX_STDCALL
1243 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1244 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6 ...) > : true_type {};
1246#ifdef _STDEX_FASTCALL
1247 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1248 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6 ...) > : true_type {};
1251 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6>
1252 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6 ...) > : true_type {};
1255 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1256 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7)> : true_type {};
1257#ifdef _STDEX_STDCALL
1258 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1259 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7) > : true_type {};
1261#ifdef _STDEX_FASTCALL
1262 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1263 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7) > : true_type {};
1266 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1267 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7) > : true_type {};
1270 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1271 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 ...)> : true_type {};
1272#ifdef _STDEX_STDCALL
1273 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1274 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 ...) > : true_type {};
1276#ifdef _STDEX_FASTCALL
1277 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1278 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 ...) > : true_type {};
1281 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7>
1282 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7 ...) > : true_type {};
1285 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1286 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8)> : true_type {};
1287#ifdef _STDEX_STDCALL
1288 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1289 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8) > : true_type {};
1291#ifdef _STDEX_FASTCALL
1292 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1293 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8) > : true_type {};
1296 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1297 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8) > : true_type {};
1300 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1301 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 ...)> : true_type {};
1302#ifdef _STDEX_STDCALL
1303 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1304 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 ...) > : true_type {};
1306#ifdef _STDEX_FASTCALL
1307 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1308 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 ...) > : true_type {};
1311 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8>
1312 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8 ...) > : true_type {};
1315 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1316 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9)> : true_type {};
1317#ifdef _STDEX_STDCALL
1318 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1319 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9) > : true_type {};
1321#ifdef _STDEX_FASTCALL
1322 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1323 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9) > : true_type {};
1326 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1327 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9) > : true_type {};
1330 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1331 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 ...)> : true_type {};
1332#ifdef _STDEX_STDCALL
1333 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1334 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 ...) > : true_type {};
1336#ifdef _STDEX_FASTCALL
1337 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1338 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 ...) > : true_type {};
1341 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9>
1342 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9 ...) > : true_type {};
1345 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1346 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10)> : true_type {};
1347#ifdef _STDEX_STDCALL
1348 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1349 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10) > : true_type {};
1351#ifdef _STDEX_FASTCALL
1352 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1353 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10) > : true_type {};
1356 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1357 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10) > : true_type {};
1360 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1361 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 ...)> : true_type {};
1362#ifdef _STDEX_STDCALL
1363 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1364 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 ...) > : true_type {};
1366#ifdef _STDEX_FASTCALL
1367 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1368 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 ...) > : true_type {};
1371 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10>
1372 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10 ...) > : true_type {};
1375 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1376 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11)> : true_type {};
1377#ifdef _STDEX_STDCALL
1378 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1379 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11) > : true_type {};
1381#ifdef _STDEX_FASTCALL
1382 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1383 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11) > : true_type {};
1386 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1387 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11) > : true_type {};
1390 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1391 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 ...)> : true_type {};
1392#ifdef _STDEX_STDCALL
1393 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1394 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 ...) > : true_type {};
1396#ifdef _STDEX_FASTCALL
1397 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1398 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 ...) > : true_type {};
1401 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11>
1402 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11 ...) > : true_type {};
1405 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1406 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12)> : true_type {};
1407#ifdef _STDEX_STDCALL
1408 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1409 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12) > : true_type {};
1411#ifdef _STDEX_FASTCALL
1412 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1413 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12) > : true_type {};
1416 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1417 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12) > : true_type {};
1420 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1421 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 ...)> : true_type {};
1422#ifdef _STDEX_STDCALL
1423 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1424 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 ...) > : true_type {};
1426#ifdef _STDEX_FASTCALL
1427 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1428 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 ...) > : true_type {};
1431 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12>
1432 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12 ...) > : true_type {};
1435 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1436 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13)> : true_type {};
1437#ifdef _STDEX_STDCALL
1438 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1439 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13) > : true_type {};
1441#ifdef _STDEX_FASTCALL
1442 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1443 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13) > : true_type {};
1446 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1447 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13) > : true_type {};
1450 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1451 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 ...)> : true_type {};
1452#ifdef _STDEX_STDCALL
1453 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1454 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 ...) > : true_type {};
1456#ifdef _STDEX_FASTCALL
1457 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1458 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 ...) > : true_type {};
1461 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13>
1462 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13 ...) > : true_type {};
1465 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1466 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14)> : true_type {};
1467#ifdef _STDEX_STDCALL
1468 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1469 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14) > : true_type {};
1471#ifdef _STDEX_FASTCALL
1472 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1473 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14) > : true_type {};
1476 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1477 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14) > : true_type {};
1480 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1481 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 ...)> : true_type {};
1482#ifdef _STDEX_STDCALL
1483 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1484 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 ...) > : true_type {};
1486#ifdef _STDEX_FASTCALL
1487 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1488 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 ...) > : true_type {};
1491 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14>
1492 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14 ...) > : true_type {};
1495 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1496 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15)> : true_type {};
1497#ifdef _STDEX_STDCALL
1498 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1499 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15) > : true_type {};
1501#ifdef _STDEX_FASTCALL
1502 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1503 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15) > : true_type {};
1506 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1507 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15) > : true_type {};
1510 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1511 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 ...)> : true_type {};
1512#ifdef _STDEX_STDCALL
1513 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1514 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 ...) > : true_type {};
1516#ifdef _STDEX_FASTCALL
1517 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1518 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 ...) > : true_type {};
1521 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15>
1522 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15 ...) > : true_type {};
1525 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1526 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16)> : true_type {};
1527#ifdef _STDEX_STDCALL
1528 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1529 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16) > : true_type {};
1531#ifdef _STDEX_FASTCALL
1532 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1533 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16) > : true_type {};
1536 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1537 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16) > : true_type {};
1540 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1541 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 ...)> : true_type {};
1542#ifdef _STDEX_STDCALL
1543 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1544 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 ...) > : true_type {};
1546#ifdef _STDEX_FASTCALL
1547 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1548 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 ...) > : true_type {};
1551 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16>
1552 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16 ...) > : true_type {};
1555 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1556 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17)> : true_type {};
1557#ifdef _STDEX_STDCALL
1558 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1559 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17) > : true_type {};
1561#ifdef _STDEX_FASTCALL
1562 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1563 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17) > : true_type {};
1566 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1567 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17) > : true_type {};
1570 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1571 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 ...)> : true_type {};
1572#ifdef _STDEX_STDCALL
1573 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1574 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 ...) > : true_type {};
1576#ifdef _STDEX_FASTCALL
1577 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1578 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 ...) > : true_type {};
1581 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17>
1582 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17 ...) > : true_type {};
1585 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1586 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18)> : true_type {};
1587#ifdef _STDEX_STDCALL
1588 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1589 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18) > : true_type {};
1591#ifdef _STDEX_FASTCALL
1592 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1593 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18) > : true_type {};
1596 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1597 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18) > : true_type {};
1600 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1601 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 ...)> : true_type {};
1602#ifdef _STDEX_STDCALL
1603 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1604 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 ...) > : true_type {};
1606#ifdef _STDEX_FASTCALL
1607 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1608 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 ...) > : true_type {};
1611 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18>
1612 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18 ...) > : true_type {};
1615 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1616 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19)> : true_type {};
1617#ifdef _STDEX_STDCALL
1618 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1619 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19) > : true_type {};
1621#ifdef _STDEX_FASTCALL
1622 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1623 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19) > : true_type {};
1626 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1627 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19) > : true_type {};
1630 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1631 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 ...)> : true_type {};
1632#ifdef _STDEX_STDCALL
1633 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1634 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 ...) > : true_type {};
1636#ifdef _STDEX_FASTCALL
1637 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1638 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 ...) > : true_type {};
1641 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19>
1642 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19 ...) > : true_type {};
1645 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1646 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20)> : true_type {};
1647#ifdef _STDEX_STDCALL
1648 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1649 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20) > : true_type {};
1651#ifdef _STDEX_FASTCALL
1652 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1653 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20) > : true_type {};
1656 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1657 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20) > : true_type {};
1660 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1661 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 ...)> : true_type {};
1662#ifdef _STDEX_STDCALL
1663 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1664 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 ...) > : true_type {};
1666#ifdef _STDEX_FASTCALL
1667 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1668 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 ...) > : true_type {};
1671 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20>
1672 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20 ...) > : true_type {};
1675 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1676 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21)> : true_type {};
1677#ifdef _STDEX_STDCALL
1678 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1679 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21) > : true_type {};
1681#ifdef _STDEX_FASTCALL
1682 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1683 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21) > : true_type {};
1686 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1687 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21) > : true_type {};
1690 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1691 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21 ...)> : true_type {};
1692#ifdef _STDEX_STDCALL
1693 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1694 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21 ...) > : true_type {};
1696#ifdef _STDEX_FASTCALL
1697 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1698 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21 ...) > : true_type {};
1701 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21>
1702 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21 ...) > : true_type {};
1705 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1706 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22)> : true_type {};
1707#ifdef _STDEX_STDCALL
1708 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1709 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22) > : true_type {};
1711#ifdef _STDEX_FASTCALL
1712 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1713 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22) > : true_type {};
1716 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1717 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22) > : true_type {};
1720 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1721 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22 ...)> : true_type {};
1722#ifdef _STDEX_STDCALL
1723 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1724 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22 ...) > : true_type {};
1726#ifdef _STDEX_FASTCALL
1727 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1728 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22 ...) > : true_type {};
1731 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22>
1732 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22 ...) > : true_type {};
1735 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1736 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23)> : true_type {};
1737#ifdef _STDEX_STDCALL
1738 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1739 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23) > : true_type {};
1741#ifdef _STDEX_FASTCALL
1742 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1743 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23) > : true_type {};
1746 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1747 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23) > : true_type {};
1750 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1751 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23 ...)> : true_type {};
1752#ifdef _STDEX_STDCALL
1753 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1754 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23 ...) > : true_type {};
1756#ifdef _STDEX_FASTCALL
1757 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1758 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23 ...) > : true_type {};
1761 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23>
1762 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23 ...) > : true_type {};
1765 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1766 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24)> : true_type {};
1767#ifdef _STDEX_STDCALL
1768 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1769 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24) > : true_type {};
1771#ifdef _STDEX_FASTCALL
1772 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1773 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24) > : true_type {};
1776 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1777 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24) > : true_type {};
1780 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1781 struct _is_function_ptr_helper<_R(*)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24 ...)> : true_type {};
1782#ifdef _STDEX_STDCALL
1783 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1784 struct _is_function_ptr_helper_stdcall<_R(_STDEX_STDCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24 ...) > : true_type {};
1786#ifdef _STDEX_FASTCALL
1787 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1788 struct _is_function_ptr_helper_fastcall<_R(_STDEX_FASTCALL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24 ...) > : true_type {};
1791 template <
class _R,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24>
1792 struct _is_function_ptr_helper_cdecl<_R(_STDEX_CDECL *)(_T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24 ...) > : true_type {};
1799#undef _STDEX_IS_MEM_FUN_PTR
1800#undef _STDEX_IS_MEM_FUN_PTR_CLR
1801#undef _STDEX_IS_MEM_FUN_CDECL_PTR
1802#undef _STDEX_IS_MEM_FUN_STDCALL_PTR
1803#undef _STDEX_IS_MEM_FUN_FASTCALL_PTR
1805#define _STDEX_IS_MEM_FUN_PTR_CLR \
1806 template <class _R, class _Tp _STDEX_TYPES > \
1807 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS)); \
1808 template <class _R, class _Tp _STDEX_TYPES > \
1809 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS...)); \
1810 template <class _R, class _Tp _STDEX_TYPES > \
1811 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS) const); \
1812 template <class _R, class _Tp _STDEX_TYPES > \
1813 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS) volatile); \
1814 template <class _R, class _Tp _STDEX_TYPES > \
1815 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS) const volatile); \
1816 template <class _R, class _Tp _STDEX_TYPES > \
1817 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS...) const); \
1818 template <class _R, class _Tp _STDEX_TYPES > \
1819 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS...) volatile); \
1820 template <class _R, class _Tp _STDEX_TYPES > \
1821 _yes_type _is_mem_function_ptr( _R ( _Tp::*const volatile*)(_STDEX_ARGS...) const volatile);
1824 _no_type _STDEX_CDECL _is_mem_function_ptr(...);
1826 _no_type _is_mem_function_ptr(...);
1830 #define _STDEX_IS_MEM_FUN_CDECL_PTR \
1831 template <class _R, class _Tp _STDEX_TYPES > \
1832 _yes_type _is_mem_function_ptr( _R(_STDEX_CDECL _Tp::*const volatile*)(_STDEX_ARGS)) ; \
1833 template <class _R, class _Tp _STDEX_TYPES > \
1834 _yes_type _is_mem_function_ptr( _R(_STDEX_CDECL _Tp::*const volatile*)(_STDEX_ARGS) const) ; \
1835 template <class _R, class _Tp _STDEX_TYPES > \
1836 _yes_type _is_mem_function_ptr( _R(_STDEX_CDECL _Tp::*const volatile*)(_STDEX_ARGS) volatile) ; \
1837 template <class _R, class _Tp _STDEX_TYPES > \
1838 _yes_type _is_mem_function_ptr( _R(_STDEX_CDECL _Tp::*const volatile*)(_STDEX_ARGS) const volatile) ;
1840 #define _STDEX_IS_MEM_FUN_CDECL_PTR
1843#ifdef _STDEX_STDCALL
1844 #define _STDEX_IS_MEM_FUN_STDCALL_PTR \
1845 template <class _R, class _Tp _STDEX_TYPES > \
1846 _yes_type _is_mem_function_ptr( _R(_STDEX_STDCALL _Tp::*const volatile*)(_STDEX_ARGS)) ; \
1847 template <class _R, class _Tp _STDEX_TYPES > \
1848 _yes_type _is_mem_function_ptr( _R(_STDEX_STDCALL _Tp::*const volatile*)(_STDEX_ARGS) const) ; \
1849 template <class _R, class _Tp _STDEX_TYPES > \
1850 _yes_type _is_mem_function_ptr( _R(_STDEX_STDCALL _Tp::*const volatile*)(_STDEX_ARGS) volatile) ; \
1851 template <class _R, class _Tp _STDEX_TYPES > \
1852 _yes_type _is_mem_function_ptr( _R(_STDEX_STDCALL _Tp::*const volatile*)(_STDEX_ARGS) const volatile) ;
1854 #define _STDEX_IS_MEM_FUN_STDCALL_PTR
1857#ifdef _STDEX_FASTCALL
1858 #define _STDEX_IS_MEM_FUN_FASTCALL_PTR \
1859 template <class _R, class _Tp _STDEX_TYPES > \
1860 _yes_type _is_mem_function_ptr( _R(_STDEX_FASTCALL _Tp::*const volatile*)(_STDEX_ARGS)) ; \
1861 template <class _R, class _Tp _STDEX_TYPES > \
1862 _yes_type _is_mem_function_ptr( _R(_STDEX_FASTCALL _Tp::*const volatile*)(_STDEX_ARGS) const) ; \
1863 template <class _R, class _Tp _STDEX_TYPES > \
1864 _yes_type _is_mem_function_ptr( _R(_STDEX_FASTCALL _Tp::*const volatile*)(_STDEX_ARGS) volatile) ; \
1865 template <class _R, class _Tp _STDEX_TYPES > \
1866 _yes_type _is_mem_function_ptr( _R(_STDEX_FASTCALL _Tp::*const volatile*)(_STDEX_ARGS) const volatile) ;
1868 #define _STDEX_IS_MEM_FUN_FASTCALL_PTR
1871#define _STDEX_IS_MEM_FUN_PTR \
1872 _STDEX_IS_MEM_FUN_PTR_CLR \
1873 _STDEX_IS_MEM_FUN_CDECL_PTR \
1874 _STDEX_IS_MEM_FUN_STDCALL_PTR \
1875 _STDEX_IS_MEM_FUN_FASTCALL_PTR
1877 #define _STDEX_TYPES
1879 _STDEX_IS_MEM_FUN_PTR
1883 #define _STDEX_TYPES , class _T0
1884 #define _STDEX_ARGS _T0
1885 _STDEX_IS_MEM_FUN_PTR
1889 #define _STDEX_TYPES , class _T0, class _T1
1890 #define _STDEX_ARGS _T0, _T1
1891 _STDEX_IS_MEM_FUN_PTR
1895 #define _STDEX_TYPES , class _T0, class _T1, class _T2
1896 #define _STDEX_ARGS _T0, _T1, _T2
1897 _STDEX_IS_MEM_FUN_PTR
1901 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3
1902 #define _STDEX_ARGS _T0, _T1, _T2, _T3
1903 _STDEX_IS_MEM_FUN_PTR
1907 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4
1908 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4
1909 _STDEX_IS_MEM_FUN_PTR
1913 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5
1914 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5
1915 _STDEX_IS_MEM_FUN_PTR
1919 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6
1920 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6
1921 _STDEX_IS_MEM_FUN_PTR
1925 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7
1926 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7
1927 _STDEX_IS_MEM_FUN_PTR
1931 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8
1932 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8
1933 _STDEX_IS_MEM_FUN_PTR
1937 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9
1938 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9
1939 _STDEX_IS_MEM_FUN_PTR
1943 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10
1944 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10
1945 _STDEX_IS_MEM_FUN_PTR
1949 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11
1950 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11
1951 _STDEX_IS_MEM_FUN_PTR
1955 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12
1956 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12
1957 _STDEX_IS_MEM_FUN_PTR
1961 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13
1962 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13
1963 _STDEX_IS_MEM_FUN_PTR
1967 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14
1968 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14
1969 _STDEX_IS_MEM_FUN_PTR
1973 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15
1974 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15
1975 _STDEX_IS_MEM_FUN_PTR
1979 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16
1980 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16
1981 _STDEX_IS_MEM_FUN_PTR
1985 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17
1986 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17
1987 _STDEX_IS_MEM_FUN_PTR
1991 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18
1992 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18
1993 _STDEX_IS_MEM_FUN_PTR
1997 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19
1998 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19
1999 _STDEX_IS_MEM_FUN_PTR
2003 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19, class _T20
2004 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20
2005 _STDEX_IS_MEM_FUN_PTR
2009 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19, class _T20, class _T21
2010 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21
2011 _STDEX_IS_MEM_FUN_PTR
2015 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19, class _T20, class _T21, class _T22
2016 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22
2017 _STDEX_IS_MEM_FUN_PTR
2021 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19, class _T20, class _T21, class _T22, class _T23
2022 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23
2023 _STDEX_IS_MEM_FUN_PTR
2027 #define _STDEX_TYPES , class _T0, class _T1, class _T2, class _T3, class _T4, class _T5, class _T6, class _T7, class _T8, class _T9, class _T10, class _T11, class _T12, class _T13, class _T14, class _T15, class _T16, class _T17, class _T18, class _T19, class _T20, class _T21, class _T22, class _T23, class _T24
2028 #define _STDEX_ARGS _T0, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24
2029 _STDEX_IS_MEM_FUN_PTR
2033#undef _STDEX_IS_MEM_FUN_PTR
2034#undef _STDEX_IS_MEM_FUN_PTR_CLR
2035#undef _STDEX_IS_MEM_FUN_CDECL_PTR
2036#undef _STDEX_IS_MEM_FUN_STDCALL_PTR
2037#undef _STDEX_IS_MEM_FUN_FASTCALL_PTR
2040 template <
class _Tp,
bool _IsRef,
bool _IsFundamental>
2041 struct _is_mem_function_ptr_impl:
2045 template <
class _Tp>
2046 struct _is_mem_function_ptr_impl<_Tp, false, false>
2049 static const bool value = (
sizeof(_is_mem_function_ptr(_is_mem_function_ptr_impl::_ptr)) ==
sizeof(_yes_type));
2051 typedef typename bool_constant<bool( _is_mem_function_ptr_impl::value ==
bool(
true) )>::type type;
2054 template <
class _Tp>
2055 struct _is_mem_function_ptr_helper:
2056 public _is_mem_function_ptr_impl<_Tp, is_reference<_Tp>::value, is_fundamental<_Tp>::value>::type
2059 template <
class,
bool _IsMemberFunctionPtr>
2060 struct _is_function_chooser_impl :
2064 template <
class _FuncPtrT>
2065 struct _is_function_chooser_impl<_FuncPtrT, false> :
2066 public _is_function_ptr_helper<_FuncPtrT>
2069 template<
class _Tp,
bool>
2070 struct _is_function_chooser_helper
2072 static const bool value =
2073 _is_function_chooser_impl<_Tp*, _is_mem_function_ptr_helper<_Tp>::value>::value;
2077 struct _is_function_chooser_helper<const _Tp, false>
2079 static const bool value =
2080 _is_function_chooser_impl<_Tp*, _is_mem_function_ptr_helper<const _Tp>::value>::value;
2084 struct _is_function_chooser_helper<volatile _Tp, false>
2086 static const bool value =
2087 _is_function_chooser_impl<_Tp*, _is_mem_function_ptr_helper<volatile _Tp>::value>::value;
2091 struct _is_function_chooser_helper<const volatile _Tp, false>
2093 static const bool value =
2094 _is_function_chooser_impl<_Tp*, _is_mem_function_ptr_helper<const volatile _Tp>::value>::value;
2097 template<
class _Tp,
bool>
2098 struct _is_function_chooser_helper_array_bug
2103 struct _is_function_chooser_helper_array_bug<_Tp, true>
2104 : bool_constant<( is_array<_Tp>::value == bool(false) )>
2108 struct _is_function_chooser_helper<_Tp, true>
2109 : _is_function_chooser_helper_array_bug<_Tp,
2110 intern::_has_bug<intern::_stdex_array_can_not_be_cv_qualified>::value>
2115 template<
class _Tp,
bool _IsRef>
2116 struct _is_function_chooser :
2120 template <
class _Tp>
2121 struct _is_function_chooser<_Tp, false>
2123 typedef typename remove_cv<_Tp>::type _stripped_type;
2125 static const bool value =
2126 _is_function_chooser_helper<_Tp, bool(
2127 (_canonical_is_function_const<_stripped_type>::value ==
bool(
true)) ||
2128 (_canonical_is_function_volatile<_stripped_type>::value ==
bool(
true))
2137 detail::_is_function_chooser<
2139 is_reference<_Tp>::value
2146 typedef remove_cv<nullptr_t>::type _nullptr_t_clear;
2149 struct _is_null_pointer_helper
2150 :
public false_type { };
2153 struct _is_null_pointer_helper<_nullptr_t_clear>:
2154 public true_type { };
2159 struct is_null_pointer :
2160 public detail::_is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
2169 struct _is_nullptr_t :
2170 public is_null_pointer<_Tp>
2177 struct _is_member_object_pointer_impl1 :
2178 public _not_< _or_<_is_function_ptr_helper<_Tp>, _is_mem_function_ptr_helper<_Tp> > >::type
2182 struct _is_member_object_pointer_impl2 :
2183 public false_type { };
2185 template<
class _Tp,
class _Cp>
2186 struct _is_member_object_pointer_impl2<_Tp _Cp::*> :
2187 public true_type { };
2190 struct _is_member_object_pointer_helper:
2191 public _and_<_is_member_object_pointer_impl1<_Tp>, _is_member_object_pointer_impl2<_Tp> >::type
2196 struct is_member_pointer;
2200 struct is_member_function_pointer :
2201 public detail::_is_mem_function_ptr_helper<typename remove_cv<_Tp>::type>::type
2206 struct is_member_object_pointer :
2207 public detail::_is_member_object_pointer_helper<typename remove_cv<_Tp>::type>::type
2212 struct is_reference :
2218 struct is_reference<_Tp&> :
2224 struct is_arithmetic :
2225 public detail::_or_<is_integral<_Tp>, is_floating_point<_Tp> >::type
2230 struct is_fundamental :
2231 public detail::_or_<is_arithmetic<_Tp>, is_void<_Tp>, is_null_pointer<_Tp> >::type
2237 public detail::_not_< detail::_or_< is_function<_Tp>, is_reference<_Tp>, is_void<_Tp> > >::type
2243 _yes_type _has_member_pointer_tester(
void (_Tp::*)());
2245 _no_type _has_member_pointer_tester(...);
2248 void (_Tp::* (_has_member_pointer_tester_helper(
int)))();
2250 char _has_member_pointer_tester_helper(...);
2253 struct _has_member_pointer_impl_helper
2255 static const bool value =
sizeof(_has_member_pointer_tester<_Tp>(0)) ==
sizeof(_yes_type) &&
sizeof(_has_member_pointer_tester_helper<_Tp>(0)) !=
sizeof(
char);
2259 struct _has_member_pointer_impl
2261 static const bool value = _has_member_pointer_impl_helper<_Tp>::value;
2262 typedef bool_constant<_has_member_pointer_impl_helper<_Tp>::value> type;
2267 struct _constructable_from_type_dummy
2269 _constructable_from_type_dummy(_Tp&);
2270 _constructable_from_type_dummy(
const _Tp&);
2271 _constructable_from_type_dummy(
const volatile _Tp&);
2275 static _yes_type _is_convertable_to_int_tester(
int);
2279 static _no_type _is_convertable_to_int_tester(...);
2282 struct _is_convertable_to_int
2284 static const bool value = (
sizeof(_is_convertable_to_int_tester<_Tp>(*_declptr<_Tp>())) ==
sizeof(_yes_type));
2288 struct _is_convertable_to_int<void>
2290 static const bool value =
false;
2294 static _yes_type _is_constructible_from_type_tester(_Tp);
2296 static _no_type _is_constructible_from_type_tester(...);
2299 struct _is_constructible_from_int
2301 static const bool value = (
sizeof(_is_constructible_from_type_tester<_Tp>(1)) ==
sizeof(_yes_type));
2304 namespace is_enum_detail
2308 typedef bool_constant<bool( _has_member_pointer_impl<dummy_enum>::value ==
bool(
true) )>::type _enum_can_have_member_pointer_bug;
2317 struct _has_bug<struct _stdex_enum_can_have_member_pointer_bug>:
2318 detail::is_enum_detail::_enum_can_have_member_pointer_bug
2325 struct _derived_dummy :
2329 template<
class _Tp,
bool>
2330 struct _is_enum_bug_internal
2332 static _derived_dummy<_Tp>* _can_be_parent_tester_helper(_derived_dummy<_Tp>*);
2334 static char _can_be_parent_tester_helper(...);
2338 struct _is_enum_bug_internal<_Tp, false>
2340 static char _can_be_parent_tester_helper(...);
2346 _yes_type _enum_can_be_parent_tester(_Tp*);
2348 _no_type _enum_can_be_parent_tester(...);
2351 struct _enum_can_be_parent
2353 static const bool value =
2355 _enum_can_be_parent_tester<_Tp>(
2356 _is_enum_bug_internal<_Tp, intern::_has_bug<intern::_stdex_enum_can_have_member_pointer_bug>::value
2357 >::_can_be_parent_tester_helper(0))) ==
sizeof(_yes_type);
2360 template<
class _Tp,
bool>
2361 struct _is_enum_helper1
2363 static const bool value =
false;
2367 struct _is_enum_helper1<_Tp, true>
2369 static const bool value = _enum_can_be_parent<_Tp>::value == bool(
false);
2372 template<
class _Tp,
bool>
2373 struct _is_enum_helper
2375 static const bool value =
2376 _has_member_pointer_impl<_Tp>::value == bool(
false);
2380 struct _is_enum_helper<_Tp, true>
2382 static const bool value =
2383 _is_enum_helper1<_Tp, bool(_is_convertable_to_int<_Tp>::value ==
bool(
true) && _is_constructible_from_int<_Tp>::value ==
bool(
false))>::value;
2386 template<
class _Tp,
bool>
2387 struct _is_enum_impl
2389 static const bool value =
2390 _is_enum_helper<_Tp, bool(is_enum_detail::_enum_can_have_member_pointer_bug::value ==
bool(
true))>::value;
2395 bool( is_enum_detail::_enum_can_have_member_pointer_bug::value ==
bool(
true) )
2396 >::value ==
bool(
true)
2401 struct _is_enum_impl<_Tp, true> :
2408 detail::_is_enum_impl<_Tp, detail::_or_<is_fundamental<_Tp>, is_pointer<_Tp>, is_function<_Tp>, is_member_pointer<_Tp>, is_array<_Tp>, is_reference<_Tp> >::value >::type
2414 public detail::_or_<is_arithmetic<_Tp>, is_pointer<_Tp>, is_member_pointer<_Tp>, detail::_or_<is_null_pointer<_Tp>, is_enum<_Tp> > >::type
2420 public detail::_not_<is_fundamental<_Tp> >::type
2426 struct _is_member_pointer_helper:
2427 public is_member_function_pointer<_Tp>
2431 template<
class _Tp,
class _Cp>
2432 struct _is_member_pointer_helper<_Tp _Cp::*> :
2433 public true_type { };
2435 template<
class _Tp,
class _Cp>
2436 struct _is_member_pointer_helper<_Tp _Cp::*const> :
2437 public true_type { };
2438 template<
class _Tp,
class _Cp>
2439 struct _is_member_pointer_helper<_Tp _Cp::*const volatile> :
2440 public true_type { };
2441 template<
class _Tp,
class _Cp>
2442 struct _is_member_pointer_helper<_Tp _Cp::*volatile> :
2443 public true_type { };
2448 struct is_member_pointer :
2449 public detail::_is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
2454 template <
class _Tp,
bool _IsReference>
2455 struct _is_class_or_union_helper
2457 typedef false_type type;
2460 template <
class _Tp>
2461 struct _is_class_or_union_helper<_Tp, false>
2463 typedef bool_constant<bool(
2464 (is_scalar<_Tp>::value ==
bool(
false))
2465 && (is_array<_Tp>::value ==
bool(
false))
2466 && (is_void<_Tp>::value ==
bool(
false))
2467 && (is_function<_Tp>::value ==
bool(
false))
2475 struct _is_union_intrinsic
2477 static const bool value =
2478 #if defined(__is_union)
2480 #elif defined(__oracle_is_union)
2481 __oracle_is_union(_Tp)
2482 #elif defined(__typeinfo)
2483 (__typeinfo(_Tp) & 0x400)
2484 #elif defined(__is_class)
2491 template <
class _Tp,
bool>
2492 struct _is_union_helper
2494 typedef false_type type;
2497 template <
class _Tp>
2498 struct _is_union_helper<_Tp, false>
2500 typedef typename _is_class_or_union_helper<_Tp, false>::type is_class_or_union;
2501 typedef bool_constant<bool(
2502 (is_class_or_union::value ==
bool(
true))
2503 && (_is_union_intrinsic<_Tp>::value ==
bool(
true))
2511 public detail::_is_union_helper<typename remove_cv<_Tp>::type, detail::_or_<is_fundamental<_Tp>, is_pointer<_Tp>, is_function<_Tp>, is_member_pointer<_Tp>, is_array<_Tp>, is_reference<_Tp> >::value>::type
2516 template <
class _Tp,
bool _IsReference>
2517 struct _is_class_helper
2519 typedef false_type type;
2522 template <
class _Tp>
2523 struct _is_class_helper<_Tp, false>
2525 typedef typename _is_class_or_union_helper<_Tp, false>::type is_class_or_union;
2526 typedef bool_constant<bool(
2527 (is_class_or_union::value ==
bool(
true))
2528 && (_is_union_intrinsic<_Tp>::value ==
bool(
false))
2536 public detail::_is_class_helper<typename remove_cv<_Tp>::type, is_reference<_Tp>::value>::type
2539 template<
class,
unsigned = 0>
2543 struct remove_all_extents;
2562 public integral_constant<std::size_t, 0> { };
2564 template<
class _Tp, std::
size_t _Size>
2565 struct rank<_Tp[_Size]>
2567 static const std::size_t value = 1 + rank<_Tp>::value;
2569 typedef const bool value_type;
2570 typedef integral_constant<std::size_t, std::size_t(rank::value)> type;
2572 operator value_type()
const
2577 value_type operator()()
const
2588 template<
class,
unsigned _U
int>
2590 public integral_constant<std::size_t, 0> { };
2592 template<
class _Tp,
unsigned _U
int, std::
size_t _Size>
2593 struct extent<_Tp[_Size], _Uint> :
2594 public integral_constant<std::size_t, std::size_t(_Uint == 0 ? _Size : extent<_Tp, _Uint - 1>::value)>
2607 template<
class _Unqualified,
bool _IsConst,
bool _IsVol>
2608 struct _cv_selector;
2610 template<
class _Unqualified>
2611 struct _cv_selector<_Unqualified, false, false>
2613 typedef _Unqualified _type;
2616 template<
class _Unqualified>
2617 struct _cv_selector<_Unqualified, false, true>
2619 typedef volatile _Unqualified _type;
2622 template<
class _Unqualified>
2623 struct _cv_selector<_Unqualified, true, false>
2625 typedef const _Unqualified _type;
2628 template<
class _Unqualified>
2629 struct _cv_selector<_Unqualified, true, true>
2631 typedef const volatile _Unqualified _type;
2634 template<class _Qualified, class _Unqualified, bool _IsConst = is_const<_Qualified>::value,
bool _IsVol = is_volatile<_Qualified>::value>
2635 class _match_cv_qualifiers
2637 typedef _cv_selector<_Unqualified, _IsConst, _IsVol> _match;
2640 typedef typename _match::_type _type;
2645 struct _make_unsigned
2651 struct _make_unsigned<char>
2653 typedef unsigned char _type;
2657 struct _make_unsigned<signed char>
2659 typedef unsigned char _type;
2663 struct _make_unsigned<short>
2665 typedef unsigned short _type;
2669 struct _make_unsigned<int>
2671 typedef unsigned int _type;
2675 struct _make_unsigned<long>
2677 typedef unsigned long _type;
2680#if defined(LLONG_MIN) && defined(LLONG_MAX)
2682 struct _make_unsigned<long long>
2684 typedef unsigned long long _type;
2689 struct _make_unsigned_selector_helper
2691 typedef unsigned char _smallest;
2692 static const bool _b0 =
sizeof(_Tp) <=
sizeof(_smallest);
2693 static const bool _b1 =
sizeof(_Tp) <=
sizeof(
unsigned short);
2694 static const bool _b2 =
sizeof(_Tp) <=
sizeof(
unsigned int);
2695 static const bool _b3 =
sizeof(_Tp) <=
sizeof(
unsigned long);
2699 class _make_unsigned_selector
2702 typedef _make_unsigned_selector_helper<_Tp> _helper;
2704 typedef typename intern::type_traits_asserts::make_unsigned_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert< is_integral<_Tp>::value >::
2705 make_unsigned_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert_failed
2709#if defined(ULLONG_MAX)
2710 typedef conditional<_helper::_b3, unsigned long, unsigned long long> _cond3;
2712 typedef conditional<_helper::_b3, unsigned long, unsigned long> _cond3;
2714 typedef typename _cond3::type _cond3_type;
2715 typedef conditional<_helper::_b2, unsigned int, _cond3_type> _cond2;
2716 typedef typename _cond2::type _cond2_type;
2717 typedef conditional<_helper::_b1, unsigned short, _cond2_type> _cond1;
2718 typedef typename _cond1::type _cond1_type;
2720 typedef typename conditional<_helper::_b0, typename _helper::_smallest, _cond1_type>::type
2722 typedef _match_cv_qualifiers<_Tp, _unsigned_type> _cv_unsigned;
2725 typedef typename _cv_unsigned::_type _type;
2731 struct make_unsigned
2733 typedef typename detail::_make_unsigned_selector<_Tp>::_type type;
2737 struct make_unsigned<_Tp const>
2739 typedef const typename detail::_make_unsigned_selector<_Tp const>::_type type;
2743 struct make_unsigned<_Tp volatile>
2745 typedef volatile typename detail::_make_unsigned_selector<_Tp volatile>::_type type;
2749 struct make_unsigned<_Tp const volatile>
2751 typedef const volatile typename detail::_make_unsigned_selector<_Tp const volatile>::_type type;
2756 struct make_unsigned<bool>;
2768 struct _make_signed<char>
2770 typedef signed char _type;
2774 struct _make_signed<unsigned char>
2776 typedef signed char _type;
2780 struct _make_signed<unsigned short>
2782 typedef signed short _type;
2786 struct _make_signed<unsigned int>
2788 typedef signed int _type;
2792 struct _make_signed<unsigned long>
2794 typedef signed long _type;
2797#if defined(ULLONG_MAX)
2799 struct _make_signed<unsigned long long>
2801 typedef signed long long _type;
2806 class _make_signed_selector
2811 typedef typename intern::type_traits_asserts::make_signed_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert< is_integral<_Tp>::value >::
2812 make_signed_template_require_that_type_shall_be_a_possibly_cv_qualified_but_integral_type_assert_failed
2815 typedef typename _make_unsigned_selector<_Tp>::_type _unsigned_type;
2817 typedef _make_signed<typename remove_cv<_unsigned_type>::type> _signedt;
2818 typedef typename _signedt::_type _signed_type;
2819 typedef _match_cv_qualifiers<_unsigned_type, _signed_type> _cv_signed;
2822 typedef typename _cv_signed::_type _type;
2830 typedef typename detail::_make_signed_selector<_Tp>::_type type;
2834 struct make_signed<_Tp const>
2836 typedef const typename detail::_make_signed_selector<_Tp const>::_type type;
2840 struct make_signed<_Tp volatile>
2842 typedef volatile typename detail::_make_signed_selector<_Tp volatile>::_type type;
2846 struct make_signed<_Tp const volatile>
2848 typedef const volatile typename detail::_make_signed_selector<_Tp const volatile>::_type type;
2853 struct make_signed<bool>;
2858 struct remove_extent
2864 template<
class _Tp, std::
size_t _Size>
2865 struct remove_extent<_Tp[_Size]>
2870 template<
class _Tp, std::
size_t _Size>
2871 struct remove_extent< const _Tp[_Size]>
2873 typedef const _Tp type;
2876 template<
class _Tp, std::
size_t _Size>
2877 struct remove_extent< volatile _Tp[_Size]>
2879 typedef volatile _Tp type;
2882 template<
class _Tp, std::
size_t _Size>
2883 struct remove_extent< const volatile _Tp[_Size]>
2885 typedef const volatile _Tp type;
2896 struct remove_all_extents
2901 template<
class _Tp, std::
size_t _Size>
2902 struct remove_all_extents<_Tp[_Size]>
2904 typedef typename remove_all_extents<_Tp>::type type;
2907 template<
class _Tp, std::
size_t _Size>
2908 struct remove_all_extents<const _Tp[_Size]>
2910 typedef const typename remove_all_extents<const _Tp>::type type;
2913 template<
class _Tp, std::
size_t _Size>
2914 struct remove_all_extents<volatile _Tp[_Size]>
2916 typedef volatile typename remove_all_extents<volatile _Tp>::type type;
2919 template<
class _Tp, std::
size_t _Size>
2920 struct remove_all_extents<const volatile _Tp[_Size]>
2922 typedef const volatile typename remove_all_extents<const volatile _Tp>::type type;
2934 template<
class _Tp,
bool>
2935 struct _add_pointer_helper
2941 struct _add_pointer_helper<_Tp, true>
2943 typedef typename remove_reference<_Tp>::type* type;
2947 struct _add_pointer_helper<const _Tp, true>
2949 typedef const typename remove_reference<_Tp>::type* type;
2953 struct _add_pointer_helper<volatile _Tp, true>
2955 typedef volatile typename remove_reference<_Tp>::type* type;
2959 struct _add_pointer_helper<const volatile _Tp, true>
2961 typedef const volatile typename remove_reference<_Tp>::type* type;
2968 :
public detail::_add_pointer_helper<_Tp, detail::_or_<detail::_is_referenceable<_Tp>, is_void<_Tp> >::value>
2978 struct _decay_selector;
2981 struct _decay_selector<_Up, false, false>
2983 typedef typename remove_cv<_Up>::type _type;
2987 struct _decay_selector<_Up, true, false>
2989 typedef typename remove_extent<_Up>::type* _type;
2993 struct _decay_selector<_Up, false, true>
2995 typedef typename add_pointer<_Up>::type _type;
3003 typedef typename remove_reference<_Tp>::type _remove_type;
3006 typedef typename detail::_decay_selector<_remove_type, is_array<_remove_type>::value, is_function<_remove_type>::value>::_type type;
3011 template<
int _I>
struct _arithmetic_type
3016 typedef typename intern::type_traits_asserts::not_allowed_arithmetic_type_assert< bool(_I != 0) >::
3017 not_allowed_arithmetic_type_assert_failed
3021 template<>
struct _arithmetic_type<1>
3024 typedef char(&result_type)[1];
3027 template<>
struct _arithmetic_type<2>
3030 typedef char(&result_type)[2];
3033 template<>
struct _arithmetic_type<3>
3035 typedef wchar_t type;
3036 typedef char(&result_type)[3];
3039 template<>
struct _arithmetic_type<4>
3041 typedef signed char type;
3042 typedef char(&result_type)[4];
3045 template<>
struct _arithmetic_type<5>
3047 typedef short int type;
3048 typedef char(&result_type)[5];
3051 template<>
struct _arithmetic_type<6>
3054 typedef char(&result_type)[6];
3057 template<>
struct _arithmetic_type<7>
3060 typedef char(&result_type)[7];
3063#if defined(LLONG_MIN) && defined(LLONG_MAX)
3064 template<>
struct _arithmetic_type<8>
3066 typedef long long type;
3067 typedef char(&result_type)[8];
3071 template<>
struct _arithmetic_type<9>
3073 typedef unsigned char type;
3074 typedef char(&result_type)[9];
3077 template<>
struct _arithmetic_type<10>
3079 typedef unsigned short int type;
3080 typedef char(&result_type)[10];
3083 template<>
struct _arithmetic_type<11>
3085 typedef unsigned int type;
3086 typedef char(&result_type)[11];
3089 template<>
struct _arithmetic_type<12>
3091 typedef unsigned long type;
3092 typedef char(&result_type)[12];
3095#if defined(ULLONG_MAX)
3096 template<>
struct _arithmetic_type<13>
3098 typedef unsigned long long type;
3099 typedef char(&result_type)[13];
3103 template<>
struct _arithmetic_type<14>
3106 typedef char(&result_type)[14];
3109 template<>
struct _arithmetic_type<15>
3111 typedef double type;
3112 typedef char(&result_type)[15];
3115 template<>
struct _arithmetic_type<16>
3117 typedef long double type;
3118 typedef char(&result_type)[16];
3121 template<>
struct _arithmetic_type<17>
3123 typedef stdex_char16_t type;
3124 typedef char(&result_type)[17];
3127 template<>
struct _arithmetic_type<18>
3129 typedef stdex_char32_t type;
3130 typedef char(&result_type)[18];
3133 _arithmetic_type<1>::result_type select(_arithmetic_type<1>::type);
3134 _arithmetic_type<2>::result_type select(_arithmetic_type<2>::type);
3135 _arithmetic_type<3>::result_type select(_arithmetic_type<3>::type);
3136 _arithmetic_type<4>::result_type select(_arithmetic_type<4>::type);
3137 _arithmetic_type<5>::result_type select(_arithmetic_type<5>::type);
3138 _arithmetic_type<6>::result_type select(_arithmetic_type<6>::type);
3139 _arithmetic_type<7>::result_type select(_arithmetic_type<7>::type);
3140#if defined(LLONG_MIN) && defined(LLONG_MAX)
3141 _arithmetic_type<8>::result_type select(_arithmetic_type<8>::type);
3143 _arithmetic_type<9>::result_type select(_arithmetic_type<9>::type);
3144 _arithmetic_type<10>::result_type select(_arithmetic_type<10>::type);
3145 _arithmetic_type<11>::result_type select(_arithmetic_type<11>::type);
3146 _arithmetic_type<12>::result_type select(_arithmetic_type<12>::type);
3147#if defined(ULLONG_MAX)
3148 _arithmetic_type<13>::result_type select(_arithmetic_type<13>::type);
3150 _arithmetic_type<14>::result_type select(_arithmetic_type<14>::type);
3151 _arithmetic_type<15>::result_type select(_arithmetic_type<15>::type);
3152 _arithmetic_type<16>::result_type select(_arithmetic_type<16>::type);
3154 _arithmetic_type<17>::result_type select_cpp11(_arithmetic_type<17>::type);
3155 _arithmetic_type<18>::result_type select_cpp11(_arithmetic_type<18>::type);
3157 template<
class _Tp,
class _U>
class _common_arithmetic_type_base
3166 static const int value =
sizeof(select(cond() ? _Tp() : _U()));
3169 template<
class _Tp,
class _U,
bool _IsBaseType>
3170 class _common_arithmetic_type_cpp11
3179 static const int value =
sizeof(select_cpp11(cond() ? _Tp() : _U()));
3182 template<
class _Tp,
class _U>
3183 class _common_arithmetic_type_cpp11<_Tp, _U, true>
3192 static const int value = _common_arithmetic_type_base<_Tp, _U>::value;
3195 template<
class _Tp,
class _U>
3196 struct _common_arithmetic_type
3201 _common_arithmetic_type_cpp11<
3204 _common_arithmetic_type_base<
3207 >::value !=
int(0) )
3212 template<
class _Tp,
class _U>
3213 struct _common_other_type :
3214 conditional<(sizeof(_Tp) > sizeof(_U)), _Tp, _U >
3218 struct _common_other_type<_Tp, detail::void_type>
3224 struct _common_other_type<detail::void_type, _Tp>
3229 template<
class _Tp,
class _U,
bool _IsArithmetic>
3230 struct _common_type_impl1 :
3231 _common_arithmetic_type<_Tp, _U>
3234 template<
class _Tp,
class _U>
3235 struct _common_type_impl1<_Tp, _U, false> :
3236 _common_other_type<_Tp, _U>
3239 template<
class _Tp,
class _U>
3240 struct _common_type_impl:
3241 public _common_type_impl1<_Tp, _U, ( (is_arithmetic<_Tp>::value == bool(true)) && (is_arithmetic<_U>::value == bool(true)) )>
3245 struct _common_type_impl<_Tp, _Tp>
3247 typedef typename decay<_Tp>::type type;
3253 template<
class _Tp,
class _T0 = detail::
void_type,
class _T1 = detail::
void_type,
class _T2 = detail::
void_type,
class _T3 = detail::
void_type,
class _T4 = detail::
void_type,
class _T5 = detail::
void_type,
class _T6 = detail::
void_type,
class _T7 = detail::
void_type,
class _T8 = detail::
void_type,
class _T9 = detail::
void_type,
class _T10 = detail::
void_type,
class _T11 = detail::
void_type,
class _T12 = detail::
void_type,
class _T13 = detail::
void_type,
class _T14 = detail::
void_type,
class _T15 = detail::
void_type,
class _T16 = detail::
void_type,
class _T17 = detail::
void_type,
class _T18 = detail::
void_type,
class _T19 = detail::
void_type,
class _T20 = detail::
void_type,
class _T21 = detail::
void_type,
class _T22 = detail::
void_type,
class _T23 = detail::
void_type,
class _T24 = detail::
void_type>
3259 template<class _T1, class _T2, class _T1d = typename decay<_T1>::type,
class _T2d =
typename decay<_T2>::type>
3260 struct _common_type_decay_helper :
3261 common_type<_T1d, _T2d>
3265 template<
class _T1,
class _T2>
3266 struct _common_type_decay_helper<_T1, _T2, _T1, _T2> :
3267 _common_type_impl<_T1, _T2>
3272 template<
class _Tp,
class _T0,
class _T1,
class _T2,
class _T3,
class _T4,
class _T5,
class _T6,
class _T7,
class _T8,
class _T9,
class _T10,
class _T11,
class _T12,
class _T13,
class _T14,
class _T15,
class _T16,
class _T17,
class _T18,
class _T19,
class _T20,
class _T21,
class _T22,
class _T23,
class _T24 >
3273 struct common_type :
3274 common_type<typename detail::_common_type_decay_helper<_Tp, _T0>::type, _T1, _T2, _T3, _T4, _T5, _T6, _T7, _T8, _T9, _T10, _T11, _T12, _T13, _T14, _T15, _T16, _T17, _T18, _T19, _T20, _T21, _T22, _T23, _T24, detail::void_type>
3278 struct common_type<_Tp>
3280 typedef typename decay<_Tp>::type type;
3283 template<
class _T1,
class _T2>
3284 struct common_type<_T1, _T2> :
3285 detail::_common_type_decay_helper<_T1, _T2>
is_volatile
Definition: type_traits.hpp:678