Я отказываюсь от этого...
$5.2.7/2- "Если T - тип указателя, v должно быть rзначением указателя на полный тип класса, и результат r значение типа T. Если T является ссылочный тип, v должен быть lvalue полного типа класса, и результатом является lзначение типа обозначаемый Т.
В соответствии с вышесказанным, следующий код должен быть хорошо сформирован.
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 будет указатель на или значение l полиморфный тип (10.3).
Итак, мой вопрос в том, что означает $5.2.7/2? Почему здесь стоит $5.2.7/6?