[cfe-dev] Potential bug in typeof (gnu extension) parsing
Eli Friedman
eli.friedman at gmail.com
Tue Sep 20 22:33:30 PDT 2011
On Tue, Sep 20, 2011 at 10:01 PM, David Blaikie <dblaikie at gmail.com> wrote:
> I was mucking about with typeof (discovered it looking at DeclSpecs various
> SourceLocation information trying to piece together SourceLocations/Ranges
> covering the entire return type both before & after the identifier) & I
> discovered this curious behavior:
> Given this:
> int i = 3;
> typeof(i) (*foo())() {
> }
> The following output is provided
>
> typeof.cpp:2:13: error: use of undeclared identifier 'foo'
> typeof(i) (*foo())()
> ^
> typeof.cc:4:2: error: expected unqualified-id
> }
> ^
>
> If I use a simple function (typeof(i) foo() {}) it compiles fine. If I use
> gcc/g++ I get a very similar error to the one clang provides. So it's at
> least bug-for-bug compatible, but I'm wondering what the desired behavior is
> here & why this case would be failing in the way it is.
> Interestingly, C++0x's decltype works totally fine here (ie: compiles
> without error). So I'm wondering: in what way is typeof not just an alias
> for decltype? Should it be? (could we remove some redundant code in clang by
> coalescing these two cases together) Or is there some legitimate reason for
> these errors.
The grammar of typeof in C++ is "typeof unary-expression". Note the
lack of parentheses in this production. Granted, it isn't
particularly sane, which is why decltype is not defined that way.
-Eli
More information about the cfe-dev
mailing list