Mercurial > lbo > hg > ctmp
view src/replace_type.cc @ 2:20c6c0bec02a
Add replace_type
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Tue, 24 Mar 2020 19:50:07 +0100 |
parents | |
children | 58777a883f54 |
line wrap: on
line source
#include <iostream> class C {}; template<typename C, typename X, typename Y> struct replace_type { typedef C type; }; template<typename X, typename Y> struct replace_type<X*, X, Y> { typedef Y* type; }; template<typename X, typename Y> struct replace_type<X&, X, Y> { typedef Y& type; }; template<typename R, typename X, typename Y> struct replace_type<R (*)(X), X, Y> { typedef R (*type)(Y); }; template<typename X, typename Y> struct replace_type<X (*)(X), X, Y> { typedef Y (*type)(Y); }; template<typename A, typename X, typename Y> struct replace_type<X (*)(A), X, Y> { typedef Y (*type)(A); }; int main(void) { typedef char& (*typ)(char& a); std::cout << typeid(typ).name() << std::endl; std::cout << typeid(replace_type<typ, unsigned, unsigned>::type).name() << std::endl; return 0; }