Whoops! uint_value_t<10>::least is unsigned char...
Can something be done about this, like having uint_value_t<10>::least
be something that looks and acts like an unsigned char but is recognized
by lexical_cast to be an integer type, not a character type?