I am looking to define a template class whose template parameter will always be an integer type. The class will contain two members, one of type T, and the other as
If you can't or don't want to depend on TR1/C++0x features, Boost.TypeTraits also offers you make_unsigned<> et al.
The answer is in <type_traits>
For determining the signed-ness of a type use std::is_signed and std::is_unsigned.
For adding/removing signed-ness, there is std::make_signed and std::make_unsigned.