Nie jestem ekspertem od standardu C++, ale będę trzymać się za szyję i odpowiedzieć na twoje pytanie. Zakładam, że użycie klasy namespace N = A
w deklaracji klasy jest sprzeczne z definicją definiowania klasy.
C++ standard definiuje członka klasy jako
member-specification:
member-declaration member-specification_opt
access-specifier : member-specification_opt
member-declaration:
decl-specifier-seq_opt member-declarator-list_opt ;
function-definition ;opt
::opt nested-name-specifier templateopt unqualified-id ;
using-declaration
static_assert-declaration
template-declaration
member-declarator-list:
member-declarator
member-declarator-list , member-declarator
member-declarator:
declarator pure-specifier_opt
declarator constant-initializer_opt
identifier_opt : constant-expression
pure-specifier:
= 0
constant-initializer:
= constant-expression
Ważnym punktem będąc =
w deklaracji, kompilator spodziewa albo czystej specyfikatora lub stałym initializer oświadczenie i jako linia nie kończy w zera nie stosujemy w tym przypadku czystego specyfikatora.
Analizując oświadczenie namespace N = A
kompilator widzi to jako
declarator = constant-expression
A ponieważ namespace
jest kluczowe nie mogą być użyte.
typedef
jest dopuszczalne, ponieważ (od standardu)
zagnieżdżone typy klas i wyliczenia zdefiniowane w klasie, i arbitralne rodzaje deklarowane jako członkowie przy użyciu deklaracji typedef.
+1, nie wiedziałem, że jest to możliwe: 'nazw N = A;' –
@Alexandre Chyba, że chce coś takiego nazw 'A = A1 A2 :: :: :: A3 A4; ' –
btw +1, ponieważ jest to dla mnie nowość :) –