Why is hiding the narrowing cast inside the constructor a good thing?  Is this constructor used for anything other than creating small int constants?  Is there correct code that doesn't explicitly set a type, but is still ok with out-of-range dinteger_t values being truncated?