Похоже, что не разрешено объявлять несколько переменных различных типов, используя ключевое слово auto
. Я не могу понять формулировку в стандарте, которая могла бы ее предотвратить.Почему объявления 'auto' должны быть одного типа?
auto i = 1, j = 1.0; //deduction failure (several compilers)
Исторически я понимаю, так как у вас есть только один Децл-спецификатор-спецификации. Тем не менее, правила в стандарте, похоже, не исключают, на самом деле они поощряют, что auto
может быть отдельным типом для каждого. Рассмотрим эти пункты:
8-3 Каждый INIT-описатель в объявлении анализируется отдельно, как если бы это было в заявлении сам по себе.
7.1.6.4-7 Если список деклараторов содержит более одного декларатора, тип каждой объявленной переменной определяется , как описано выше. [...]
Даже без auto
не все переменные должны были иметь тот же тип, так как некоторые модификаторы, как *
могут быть применены к каждому описателя индивидуально. Теперь мне кажется, что формулировка позволяет каждому объявлению auto
быть совершенно другим типом.
Какой пункт запретил бы это?
BTW - пример использования в 7.1.6.4/3 является 'const auto * v = & x, u = 6; // OK: v имеет тип const int *, u имеет тип const int' - очевидно, идея состоит в том, что вывод типа из первой переменной может быть использован при создании последующих ... –