【发布时间】:2011-05-11 08:22:31
【问题描述】:
我放弃了……
$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 会出现在这里?
【问题讨论】:
标签: c++ dynamic-cast