我放弃这个...
$5.2.7/2-“如果 T 是指针类型,v 应该是指向完整类类型的指针的右值,结果是 T 类型的右值。如果 T 是引用类型,v 应该是一个完整的类类型,结果是 T 所指类型的左值。”
按照上面的说法,下面的代码应该是良构的。
struct A{};
struct B : A{};
int main(){
B b;
A a, &ar1 = b;
B& rb1 = dynamic_cast<B&>(ar1); // Does not $5.2.7/2 apply here?
B& rb2 = dynamic_cast<B&>(a); // and also here?
}
但事实并非如此。所有编译器都抱怨 dynamic_cast 的操作数不是多态的
$5.2.7/6- 否则, v 应为指向多态类型 (10.3) 的指针或左值。
所以我的问题是 $5.2.7/2 是什么意思?为什么 5.2.7/6 美元会出现在这里?