mi arrendo su questo ...dynamic_cast confusione
$ 5.2.7/2- "Se T è un tipo di puntatore, v sarà un rvalue di un puntatore a tipo di classe completa, e il risultato è un rvalue di tipo T. Se T è un tipo riferimento, v è un Ivalue di un tipo di classe completo, e il risultato è un Ivalue del tipo cui da T."
In conformità a quanto sopra, il seguente codice deve essere ben formato.
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?
}
Ma non lo è. Tutti i compilatori lamentano l'operando per dynamic_cast non essere polimorfica secondo
$ 5.2.7/6- In caso contrario, V è un puntatore o un lvalue di tipo polimorfico (10.3).
Quindi la mia domanda è cosa significa $ 5.2.7/2? Perché kick $ 5.2.7/6 entra qui?
c'è qualche altro caso in cui 'altrimenti' nello Standard viene utilizzato in un * potenzialmente * non chiaro modo – Chubsdad
@Chubsdad: mi aspetto così. –
qual è la differenza b/n "deve" e "sarà" come utilizzato nello standard? – Chubsdad