Me rindo en este ...dynamic_cast confusión
$ 5.2.7/2- "Si T es un tipo de puntero, v a bordo otro valor p de un puntero a completa Tipo de clase, y el el resultado es un valor de tipo T. Si T es un tipo de referencia , v será un lvalue de un tipo de clase completo, y el resultado es un valor l del tipo al que hace referencia T. "
De acuerdo con lo anterior, el siguiente código debe estar bien formado.
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?
}
Pero no lo es. Todos los compiladores se quejan de la operando a dynamic_cast no ser polimórfica de acuerdo con
$ 5.2.7/6- De lo contrario, v deberá ser un puntero a o un lvalue de un tipo polimórfico (10.3).
Así que mi pregunta es ¿qué significa $ 5.2.7/2? ¿Por qué entran $ 5.2.7/6 aquí?
¿hay algún otro caso en el que 'de lo contrario' en la Norma se use de una manera * potencialmente * incierta – Chubsdad
@Chubsdad: lo espero. –
¿Cuál es la diferencia b/w 'shall' y 'will' como se usa en el estándar? – Chubsdad