template<typename T>
struct addition_traits
{
typedef T const &type;
};
struct addition_traits<char> { typedef char type; };
struct addition_traits<char const> { typedef char const type; };
struct addition_traits<char *> { typedef char * type; };
struct addition_traits<char const *> { typedef char const * type; };