http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58093
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Nick Maclaren from comment #5)
> I did. Please read what the C++ standard says about conversions. 4.7
> [conv.integral] paragraph 2 is a paraphrase of wording that has been in
> every C and C++ compiler since C90,
But that's not where narrowing conversions are defined.
See the examples in 8.5.4 which make it clear that converting a negative value
to an unsigned type is a narrowing conversion:
unsigned char uc2 = {-1}; // error: narrows
unsigned int ui1 = {-1}; // error: narrows
Those exxamples come from the proposal by Stroustrup et al:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2531.pdf
Also http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1449
"As is made plain in the examples in that paragraph, a conversion of a negative
value to an unsigned type is intended to be a narrowing conversion"