This patches implements the auto keyword from the N3007 standard specification.
This allows deducing the type of the variable like in C++
auto nb = 1; auto chr = 'A'; auto str = "String";
The list of statements which allows the usage of auto:
- Basic variables declarations (int, float, double, char, char*...)
- Macros declaring a variable with the auto type
The list of statements which will not work with the auto keyword:
- auto arrays
- sizeof(), alignas()
- auto parameters, auto return type
- auto as a struct/typedef member
- uninitialized auto variables
- auto in an union
- auto as a enum type specifier
- auto casts
- auto in an compound literals
I think we'll need this diagnostic for more than just * in a declaration. Consider a case like:
accepting this is also an extension because it declares y, which is not an "ordinary" identifier. See 6.7.9p2-3
Also, because this is about the syntax used, I think this might be a diagnostic that should live in DiagnosticParseKinds.td (but maybe it's correct here, I've not reviewed enough yet to see).