I am porting some C++ code to GCC, and apperantly it isn't happy with C++ style casting when sapces are involved, as in unsigned int(-1)
, long long(ShortVar)
etc... It gives an error: expected primary-expression before 'long'
.
Is there any way to make peace with GCC without going over each one of those and rewrite in c-style?
You want
static_cast<unsigned int>(-1)
and kin. Those tend to be viewed as the more C++-style casts, and don't have the same problem.For what it's worth, you'd have to do:
And then:
Or in C++0x:
The probability is high that you type
static_cast<unsigned int>(-1)
, but really wantstd::numeric_limits<unsigned int>::max()
or, if not applicable,UINT_MAX
.The difference is primarily in that the latter two express what you want. Casting -1 to unsigned int is less expressive, if at all, therefore not the preferred solution.
In general, prefer to write expressive code. You'll thank yourself later, and your fellow programmers and the HR department will not frown upon you.
GCC is correctly crying --
unsigned int(-1)
is a notation that is not conformant with the C++03 standard (5.4.2):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:
Simple type specifiers do not include the composite ones (the ones with spaces).