// xxtype_traits TR1 internal header
// NOTE: no include guard

template<class _Ret _C_CLASS_ARG0>
	struct _Is_funptr<_Ret (*)(_ARG0_ARG1)>
	: true_type
	{	// base class for function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_funptr<_Ret (*)(_ARG0_ARG1 ...)>
	: true_type
	{	// base class for function pointer predicates
	};

 #if _NARGS != 0
template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2)>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2 ...)>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2) const>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2 ...) const>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2) volatile>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2 ...) volatile>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2) const volatile>
		: true_type
	{	// base class for member function pointer predicates
	};

template<class _Ret _C_CLASS_ARG0>
	struct _Is_memfunptr<_Ret (_Arg0::*)(_ARG1_ARG2 ...) const volatile>
		: true_type
	{	// base class for member function pointer predicates
	};
 #endif /* _NARGS != 0 */

/*
 * Copyright (c) 1992-2009 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V5.20:0009 */
