为什么'auto'声明必须属于同一类型?

edA*_*a-y 14 c++ language-lawyer c++11

似乎不允许使用auto关键字声明不同类型的多个变量.我无法弄清楚标准中可能会阻止它的措辞.

auto i = 1, j = 1.0; //deduction failure (several compilers)
Run Code Online (Sandbox Code Playgroud)

从历史上我理解,因为你只有一个decl-specifier-spec.但是,标准中的规则似乎并未排除,实际上它们鼓励,这auto可能是每种规则的不同类型.考虑以下段落:

8-3 声明中的每个init-declarator都会被单独分析,就好像它本身就在声明中一样.

7.1.6.4-7如果声明符列表包含多个声明符,则每个声明的变量的类型如上所述确定.[...]

即使没有auto所有变量都需要具有相同的类型,因为某些修饰符*可以单独应用于每个声明符.现在看来,措辞允许每个auto声明者是完全不同的类型.

哪一段会禁止这个?

Man*_*rse 9

对列表中的每个对象执行类型推导,但最终结果必须是单一类型[dcl.spec.auto]/7(强调我的):

如果声明符列表包含多个声明符,则每个声明的变量的类型如上所述确定.如果针对模板参数U推导出的类型在每个推导中不相同,则该程序是不正确的.