|
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);
};
|