GCC is correctly crying -- unsigned int(-1)
is a notation that is not conformant with the C++03 standard (5.4.2):
An explicit type conversion can be expressed using functional notation (5.2.3), a type conversion operator (dynamic_cast, static_cast, reinterpret_cast, const_cast), or the cast notation:
cast-expression:
unary-expression
( type-id ) cast-expression
Ergo, you can either correct the cast with the parenthesis, follow the excellent suggestions proposed by GMan :) -- and I'd truly recommend the latter.
Edit: the functional notation requires a simple-type-specifier:
5.2.3 - A simple-type-specifier (7.1.5) followed by a parenthesized expression-list constructs a value of the specified type given the expression list.
Simple type specifiers do not include the composite ones (the ones with spaces).