To value initialize an object of type T, one would do something along the lines of one of the following:
T x = T();
T x((T()));
<
Hmm, sometimes you need a typedef. If it doesn't say a diagnostic is required, then it's not incorrect for them to support this. Nevertheless, for portability, you can use a typedef (uint16_t or uint64_t, although those might not be right), or quote the typename with a template:
iterator::value_type( 5 )
How's that for unreasonably verbose?
Edit: Duh, or simply 5ul. That leaves unsigned short, unsigned char, and signed char as the only types you can't easily explicitly construct.