variable usar sirve resueltos que programacion para namespace leer funciones ejercicios ejemplos dev definir create como caracteres caracter cadenas cadena c++ namespaces language-lawyer definition using-declaration

c++ - usar - Intentando definir el miembro del espacio de nombres mediante la declaración de uso



using c++ (1)

Considere el siguiente programa. Está bien formado o no de acuerdo con el estándar c ++ (se necesitan referencias a partes relevantes del estándar):

namespace X { extern int i; } namespace N { using X::i; } int N::i = 1; int main() {}

Estoy obteniendo diferentes resultados para diferentes compiladores. Estoy tratando de averiguar para qué compilador debo presentar un informe de error:

  • Clang: Da el siguiente error de compilación: Ningún miembro llamado ''i'' en el espacio de nombres ''N''

  • GCC y Visual C ++ lo compilan sin errores.

Para comparación, lo siguiente da error de compilador con los tres compiladores:

namespace X { void f(); } namespace N { using X::f; } void N::f() {}; int main() {}


Proyecto de trabajo actual N4527, [8.3p1]:

[...] Cuando el declarador-id está calificado, la declaración se referirá a un miembro previamente declarado de la clase o espacio de nombres al que se refiere el calificador (o, en el caso de un espacio de nombres, de un elemento del conjunto de espacios de nombres en línea de ese espacio de nombres (7.3.1)) o de una especialización del mismo; el miembro no debe haberse introducido simplemente por una declaración de uso en el ámbito de la clase o espacio de nombres designado por el especificador de nombre anidado del identificador-declarador . [...]

Entonces, definitivamente mal formado; GCC y MSVC están equivocados.