I would be interested in any work on using declarations, as I have been
scoping that out for my next project after the Unicode work.
Again, I was looking for a simple idea (C++0x type alias - should be able to
hook directly into typedef code) and discovered a much deeper hole. So my
concern is that any work here looks ahead to all the possible directions
that C++0x will go.
"using" got a lot more complicated in C++0x. Heck, it has more new meanings than "auto"!
Still, I don't think it's all that hard to deal with these variants.
In short, if we see the keyword 'using' we may be about to parse:
i/ a using directive for namespaces
We have the "namespace" keyword, so this is easy to cope with.
ii/ a C++98 using declaration
Since we turn nested-name-specifiers into a single token, this is pretty easy to cope with. Although semantic analysis will have to distinguish it from...
iii/ a C++0x inheriting constructor declaration -> declares *a set* of
constructors
... this one.
iv/ a C++0x alias declaration => this declares a C++98 typedef name
This is easy to distinguish with two-token lookahead, although it'd be better if we didn't need it.
v/ a C++0x template alias, if using preceded by a template declaration
Same as above; we just have to cope with a template header.
vi/ a number of concept-related variants that I don't quite grok yet.
These are for scoped concept maps.
The current code is only annotated with the grammar for (i) and (ii)
Our general philosophy is: make C++98/03 work first, but design in support for C++0x so that it's easy to implement later. Of course, we love patches for C++0x features, too!
Personally, I would rather see a broad set of test-cases before starting an
implementation, as there are some nasty cases to catch such as different
rules for duplicate identifiers at namespace or class scope etc.
So long as we have a decent test case with the implementation, I'm happy. That said, Alisdair implies another important point: coming up with test cases is very helpful for the development process, even when we don't yet have an implementation!
- Doug