为什么基类不会在相同的"自动"声明中自动推断出来?

iam*_*ind 3 c++ language-lawyer type-declaration c++11

以下错误相关auto,可以理解:

auto i = int(), d = double(); // error: inconsistent deduction for ‘auto’
Run Code Online (Sandbox Code Playgroud)

但是,为什么跟随受到同样错误的牺牲:

struct B {};
struct D : B {};

const auto &b1 = B(), &b2 = D(); // error: inconsistent deduction for ‘auto’
Run Code Online (Sandbox Code Playgroud)

已经知道了,b1已经推断出const B&,不能编译器尝试制作b2一个const B&?(即,如果b2推测出来会导致什么样的危险呢const B&?)

Den*_*ose 6

危险将是意想不到的结果......当你创建一个D时,你希望得到一个D作为结果.还有一个事实是有一个演员阵容......它是一个"安全"的演员阵容,但是一个演员阵容.相同的参数可以为第一个例子进行......为什么不编译器只是让dint,因为double可以平凡转换,它已经决定,是基于结果的类型i.或者你有两个兄弟类的情况......他们是否应该解决共同基础?

如果您希望编译该代码,则可以始终显式地转换结果,D()以便两个表达式生成相同的类型.

并为语言律师位:

[decl.spec.auto]/7:

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