No soy un experto en el estándar C++, pero voy a sacar el cuello e intentar responder a tu pregunta. Supongo que el uso de namespace N = A
dentro de una declaración de clase carece de la definición de cómo debe definirse un miembro de la clase.
El C++ estándar define un miembro de la clase como
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
El punto importante es la =
en la declaración, el compilador está a la espera sea un especificador puro o constante inicializador declaración y que la línea no termina en un cero, no estamos aplicando un especificador puro en este caso.
Analizando la declaración namespace N = A
el compilador ve esto como
declarator = constant-expression
Y puesto namespace
es una palabra clave que no se puede utilizar.
typedef
está permitido porque (de la norma)
tipos anidados son clases y enumeraciones definidas en la clase, y tipos arbitrarios declarados como miembros mediante el uso de una declaración typedef.
+1, yo no sabía que esto era posible: 'espacio de nombres N = A;' –
@Alexandre supongo que quiere algo parecido a este espacio de nombres 'A = A1 A2 :: :: :: A3 A4; ' –
por cierto +1 ya que esto es nuevo para mí :) –