c++c++11language-lawyerstandards-compliance

Is "auto int i" valid C++11?


In answering this question the question arose as to whether the traditional C meaning of the keyword auto (automatic, rather than static or extern storage) is still valid in C++11 now that it means type deduction.

I remember that the old meaning of auto should remain where relevant but others disagreed.

auto char c = 42; // either compilation error or c = '*'

Looking at compilers I see the current division.

  1. Old meaning of auto is no longer allowed
  1. Old meaning of auto is used where relevant

Do you know which is the correct behaviour?


Solution

  • No, it is not. In fact, §7.1.6.​4/3 gives the following example:

    auto x = 5; // OK: x has type int
    const auto *v = &x, u = 6; // OK: v has type const int*, u has type const int
    static auto y = 0.0; // OK: y has type double
    auto int r; // error: auto is not a storage-class-specifier
    

    As you can see, it results in an error. §7.1.6.​5 pretty much seals the deal with:

    A program that uses auto in a context not explicitly allowed in this section is ill-formed.