Yup, это недействительно. Вот цитата.
Раздел 9 пункта 11, курсив мои:
If a class-head-name contains a nested-name-specifier, the class-specifier shall refer to a class that was previously declared directly in the class or namespace to which the nested-name-specifier refers, or in an element of the inline namespace set (7.3.1) of that namespace (i.e., not merely inherited or introduced by a using-declaration), and the class-specifier shall appear in a namespace enclosing the previous declaration. In such cases, the nested-name-specifier of the class-head-name of the definition shall not begin with a decltype-specifier.
В вашем примере, класс-голова-имяявляется лексемой B::nested
, который включает в вложенного-имя-спецификаторB::
и класс-имяnested
. Спецификатор - это все struct B::nested {
... }
.
Я не думаю, что частный «вложенный» класс A виден B. – franji1
@ franji1: Я не думаю, что это имеет какое-либо отношение к видимости. Я изменил классы на структуры, и clang все еще отвергает его. – HighCommander4