C++ Auto Declarations – Why Must ‘Auto’ Declarations Be of the Same Type in C++?

c++c++11language-lawyer

It appears that it is not allowed to declare multiple variables of distinct types using the auto keyword. I can't figure out the wording in the standard that would prevent it however.

auto i = 1, j = 1.0; //deduction failure (several compilers)

Historically I understand since you have only one decl-specifier-spec. However, the rules in the standard don't seem to preclude, in fact they encourage, that auto can be a distinct type for each. Consider these paragraphs:

8-3 Each init-declarator in a declaration is analyzed separately as if it was in a declaration by itself.

7.1.6.4-7 If the list of declarators contains more than one declarator, the type of each declared variable is determined
as described above. […]

Even without auto not all variables needed to have the same type, as certain modifiers like * could be applied to each declarator individually. To me it appears now that the wording allows each auto declarator to be a completely distinct type.

Which paragraph would prohibit this?

Best Answer

Type deduction is performed for every object in the list, but the final result must be a single type [dcl.spec.auto]/7 (emphasis mine):

If the list of declarators contains more than one declarator, the type of each declared variable is determined as described above. If the type deduced for the template parameter U is not the same in each deduction, the program is ill-formed.

Related Question