42 как unsigned int хорошо определен как "42U".
unsigned int foo = 42U; // yeah!
Как я могу написать "23", чтобы было ясно, что это unsigned short int?
unsigned short bar = 23; // booh! not clear!
ИЗМЕНИТЬ, чтобы смысл вопроса был более ясным:
template <class T>
void doSomething(T) {
std::cout << "unknown type" << std::endl;
}
template<>
void doSomething(unsigned int) {
std::cout << "unsigned int" << std::endl;
}
template<>
void doSomething(unsigned short) {
std::cout << "unsigned short" << std::endl;
}
int main(int argc, char* argv[])
{
doSomething(42U);
doSomething((unsigned short)23); // no other option than a cast?
return EXIT_SUCCESS;
}