File indexing completed on 2024-09-22 04:53:11
0001 #ifndef __MOCKITOPP_REMOVE_MEMBER_FUNCTION_POINTER_CV_HPP__ 0002 #define __MOCKITOPP_REMOVE_MEMBER_FUNCTION_POINTER_CV_HPP__ 0003 0004 include(`mockitopp/detail/m4/ENUM_PARAMS.m4')dnl 0005 include(`mockitopp/detail/m4/ENUM_TRAILING_PARAMS.m4')dnl 0006 include(`mockitopp/detail/m4/REPEAT.m4')dnl 0007 namespace mockitopp 0008 { 0009 namespace detail 0010 { 0011 /** 0012 * Simple meta-prorgramming template that removes 0013 * const/volatile from member function pointers 0014 * making them suitable for internal use. 0015 * 0016 * @author Trevor Pounds 0017 */ 0018 template <typename T> 0019 struct remove_member_function_pointer_cv 0020 { typedef T type; }; 0021 0022 define(`REMOVE_MFP_CV_TEMPLATE', 0023 ` // $1 argument MFP remove const template 0024 template <typename R, typename C`'M4_ENUM_TRAILING_PARAMS($1, typename A)> 0025 struct remove_member_function_pointer_cv<R (C::*)(M4_ENUM_PARAMS($1, A)) const> 0026 { typedef R (C::*type)(M4_ENUM_PARAMS($1, A)); }; 0027 0028 // $1 argument MFP remove const volatile template 0029 template <typename R, typename C`'M4_ENUM_TRAILING_PARAMS($1, typename A)> 0030 struct remove_member_function_pointer_cv<R (C::*)(M4_ENUM_PARAMS($1, A)) const volatile> 0031 { typedef R (C::*type)(M4_ENUM_PARAMS($1, A)); }; 0032 0033 ')dnl 0034 M4_REPEAT(eval(MOCKITOPP_MAX_VIRTUAL_FUNCTION_ARITY + 1), `REMOVE_MFP_CV_TEMPLATE')dnl 0035 } // namespace detail 0036 } // namespace mockitopp 0037 0038 #endif //__MOCKITOPP_TR1_TYPE_TRAITS_HPP__