[cfe-dev] type-id/functional cast ambiguity resolution
Argiris Kirtzidis
akyrtzi at gmail.com
Tue Oct 28 02:21:32 PDT 2008
Hi all,
Here's a test case:
void f() {
int x = (int())+1;
}
GCC, MSVC and Comeau, all treat "(int())" as a cast to function type and
report a "invalid cast" compile error.
The standard has this to say:
> // C++ 8.2p2:
> // The ambiguity arising from the similarity between a
> function-style cast and
> // a type-id can occur in different contexts. The ambiguity appears as a
> // choice between a function-style cast expression and a declaration
> of a
> // type. The resolution is that any construct that could possibly be
> a type-id
> // in its syntactic context shall be considered a type-id.
In the above test case, the construct "int()" cannot be a type-id in its
syntactic context, shouldn't it be considered as a function-style cast
resulting in no compilation errors ?
You might think that all three compilers doesn't consider the type-id's
syntactic context beyond the parentheses, but take a look at this:
void f() {
(int());
}
All 3 compilers now regard "int()" as a function-style cast and report
no errors.
That doesn't seem consistent, if the second case is regarded as correct,
then the first one should be as well.
Any thoughts ?
-Argiris
More information about the cfe-dev
mailing list