[cfe-dev] type-id/functional cast ambiguity resolution
Argiris Kirtzidis
akyrtzi at gmail.com
Tue Oct 28 03:08:51 PDT 2008
In my post, change "function-style cast" to "type construction".
"T()" is a specific case of "T( expression-list[opt] )" described in
"5.2.3 Explicit type conversion (functional notation)", and I sometimes
tend to think the general case as "function-style cast".
-Argiris
Argiris Kirtzidis wrote:
> 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