On Friday, 5 June 2015 at 10:56:36 UTC, ketmar wrote:
p.s. if "auto" is a storage class, the following code should be accepted(while it isn't): int foo () { return 42; } void main () { auto auto i = foo(); } as it's logically "an auto-typed var with "auto" storage class".
Here lies your mistake. There is no such thing as "auto"-typed (leaving aside function signatures, which might be special-cased and are different beast altogether). Auto is not a type. auto* or auto[] aren't valied either. Auto is just a storage class, no more, no less. You use it if the grammar needs a storage class but you don't want to give special attributes to the variable (like const or static). To make a declaration with inferred type you need at least one storage class. To make it work with "normal" variables you use "auto".
