for c++ language-lawyer c++14 using-declaration

for - using c++ 11



Una declaración de uso no se puede repetir en el alcance de la función. ¿Porqué es eso? (1)

La primera es una declaración dentro de un espacio de nombres, y las declaraciones de uso múltiple pueden suceder con frecuencia utilizando #includes. El segundo está dentro de la definición de una función, y nunca lo haría a menos que cometiera un error. Tampoco puede definir el mismo símbolo dos veces, por ejemplo, pero puede declarar varias veces.

La declaración de uso es también más que una declaración. Es un poco más fuerte, ya que importa una función de un espacio de nombres a otro. Por ejemplo, puede arrastrar una función de miembro de clase base protegida a una clase derivada, haciéndola pública. Es casi una definición por vinculación.

En [namespace.udecl] / 10 tiene el siguiente ejemplo:

namespace A { int i; } namespace A1 { using A::i; using A::i; // OK: double declaration } void f() { using A::i; using A::i; // error: double declaration }

Este fragmento se compila en clang.