«В противном случае» в данном случае означает «если не применяются условия в 5.2.7 / 5».
Вы можете сказать это, потому что / 2 накладывает на программу требование относительно операнда dynamic_cast
(обратите внимание, что «должен» язык «v будет lvalue» против «is» язык «результат является lvalue»).Как и в других местах в стандарте, выражение требования не обязательно означает, что это требование only .В других пунктах могут быть указаны дополнительные требования.В этом случае / 6 устанавливает дополнительное требование, которое применяется только в определенных случаях, в зависимости от T и статического типа v.
/ 3, / 4, / 5 сообщают вам о значении результата, и они полностью соответствуют требованию в / 2.Ни один из них не начинается с «В противном случае».Поэтому для меня совершенно очевидно, что они не образуют цепочку «иначе, если», начинающуюся с /2.
Некоторые скобки или что-то может сделать это более понятным (то есть, что «в противном случае» в / 6 относится к «если "в / 5, а не" если "в / 2, / 3 или / 4).Но это просто не стиль дома.
Помимо всего прочего, «иначе» в / 5 логически не может значимо применяться к условиям в / 2./ 1 говорит, что T должен быть «указатель или ссылка на полный тип класса, или cv void*
»./ 2 охватывает два случая - типы указателей и ссылочные типы.Это все«/ Иначе» в / 2 не существует (если не сказать «иначе, соответствующий компилятор должен выдать диагностику», но это неявно)