ich auf diese verzichten ...dynamic_cast Verwirrung
$ 5.2.7/2- „Wenn T ein Zeigertyp ist, v wird ein R-Wert eines Zeigers auf komplette Klassentyp sein, und die Ergebnis ist ein R-Wert des Typs T. Wenn T ein Referenztyp ist, sollte v ein L-Wert eines vollständigen Klassentyps sein, und das Ergebnis ist ein L-Wert des Typs , auf den sich T bezieht. "
In Übereinstimmung mit dem oben genannten sollte der folgende Code wohlgeformt sein.
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?
}
Aber es ist nicht. Alle Compiler über die Operanden nicht beschweren dynamic_cast mit
$ 5.2.7/6- Ansonsten gemäß polymorphen ist, v wird ein Zeiger auf oder ein L-Wert eines polymorphen Typ (10.3) liegen.
Also meine Frage ist, was bedeutet $ 5.2.7/2? Warum tritt $ 5.2.7/6 hier ein?
gibt es einen anderen Fall, wo "sonst" im Standard in einer * potenziell * unklaren Weise verwendet wird – Chubsdad
@Chubsdad: Ich erwarte so. –
Was ist der Unterschied s/w 'soll' und 'wird' wie im Standard verwendet? – Chubsdad