On Oct 12, 2010, at 5:45 AM, Daniel Wallin wrote:
> On Tue, Oct 12, 2010 at 5:56 AM, Sean Hunt <[email protected]>
> wrote:
>> On 10/11/2010 08:57 AM, Daniel Wallin wrote:
>>> On Sat, Oct 9, 2010 at 1:55 AM, Douglas Gregor<[email protected]> wrote:
>>>> It'd be great if the declaration printer/dumper was updated to print the
>>>> "class" in "enum class" and the fixed underlying type (when present), so
>>>> that our -ast-dump and -ast-print output would be helpful.
>>>>
>>>> I've gone ahead and committed a tweaked version of your patch in r116122,
>>>> with the minor tweaks above. It'd be great if you could address the issues
>>>> above in a separate patch (disambiguation, diagnostics, declaration
>>>> printer).
>>>
>>> Sure! The git mirror I'm using is a bit behind, so I'm not 100% sure
>>> these apply cleanly. If not I'll rebase when the mirror catches up.
>>
>> I believe that
>>
>> enum A { };
>> class C {
>> enum A : int();
>> };
>>
>> is a syntax error for attempting to declare an enumeration with an
>> underlying function type, since the default rule in case of ambiguity is
>> always to consider it a type-id. I do not believe that the patch
>> correctly handles this; I think it should instead attempt to determine
>> if it is a type-id before the semicolon/opening brace, and then act
>> accordingly.
>
> int() is a integral constant expression and the above code is well
> formed in C++98, and I think it's meant to be in C++0x as well. There
> isn't really an ambiguity here because base-type must be an integral
> type, which of course X() can never satisfy. If we treat everything as
> a type-id the case Doug gave above is ill formed.
There isn't an ambiguity here, but that's not the reason: ambiguity resolution
doesn't take semantics into account. It's purely syntactic + determining
whether a name refers to a type or a template.
int() is not parsed as a type here because an enum-base is described by the
grammar
: type-specifier-seq
which cannot include parentheses to form a function type.
- Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits