https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84701
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think this should be rejected, just like: typedef int T; unsigned T i; You can combine unsigned with int (or char, or long, or short) to refer to a type, but not use it to modify an existing type. You make_unsigned_t<typeof(s)> to do that.