| template <typename C, typename X, typename Y>struct replace_type_d{ typedef C type;}; template <typename C, typename X, typename Y>struct replace_type_d<C&, X, Y>{ typedef typename replace_type<C, X, Y>::type& type;}; template <typename C, typename X, typename Y>struct replace_type_d<C*, X, Y>{ typedef typename replace_type<C, X, Y>::type* type;}; template <typename C, typename X, typename Y>struct replace_type_d<C const, X, Y>{ typedef typename replace_type<C, X, Y>::type const type;}; template <typename C, typename X, typename Y>struct replace_type_d<C volatile, X, Y>{ typedef typename replace_type<C, X, Y>::type volatile type;}; template <typename C, typename X, typename Y, std::size_t n>struct replace_type_d<C[n], X, Y>{ typedef typename replace_type<C, X, Y>::type type[n];}; template <typename R, typename X, typename Y>struct replace_type_d<R(*)(), X, Y>{ typedef typename replace_type<R, X, Y>::type RetType; typedef RetType (*type)();}; template <typename R, typename A, typename X, typename Y>struct replace_type_d<R(*)(A), X, Y>{ typedef typename replace_type<R, X, Y>::type RetType; typedef typename replace_type<A, X, Y>::type ArgType; typedef RetType (*type)(ArgType);}; template <typename R, typename A1, typename A2, typename X, typename Y>struct replace_type_d<R(*)(A1, A2), X, Y>{ typedef typename replace_type<R, X, Y>::type RetType; typedef typename replace_type<A1, X, Y>::type Arg1Type; typedef typename replace_type<A2, X, Y>::type Arg2Type; typedef RetType (*type)(Arg1Type, Arg2Type);}; |