Namespace Mitglied nicht beilegen können in einem Namensraum definiert werden, die die Erklärung des Namensraum umschließt:Redeklaration in einem Namespace, das die ursprüngliche Erklärung
Mitglieder eines benannten Namespace kann auch außerhalb dieses Namensraum durch explizite definiert werden Qualifikation (3.4.3.2) des definierten Namens, vorausgesetzt, dass die zu definierende Entität bereits im Namensraum deklariert wurde und die Definition nach dem Punkt der Deklaration in einem Namensraum erscheint, der den Namensraum der Deklaration einschließt.
void f();
namespace N { void ::f() {} } // illegal for definition
namespace N { void ::f(); } // what about redeclaration?
Klasse kann in einem Namensraum definiert werden, das die Erklärung des Namensraum umschließt:
Wenn ein Klasse-Kopf-name einen verschachtelten-name-Spezifizierer enthält, wird das Klasse-specifier beziehen zu einer Klasse, die zuvor direkt in der Klasse oder dem Namespace deklariert wurde, auf die der Nested-Name-Specifier verweist, oder in einem -Element des Inline-Namespace-Satzes (7.3.1) dieses Namespace (dh nicht nur geerbt oder eingeführt von eine using-Deklaration), und der Klassenspezifizierer soll in einem Namensraum erscheinen, der die vorherige Deklaration enthält. In solchen Fällen darf der Nested-Name-Specifier des Klassenkopfnamens der Definition nicht mit einem Decltype-Specifier beginnen.
struct A;
namespace N { struct ::A {}; } // illegal for definition
namespace N { struct ::A; } // what about redeclaration?
Auch wir haben die gleiche Regel für Funktionsdefinition und statisches Datenelement Definition.
Meine Frage ist also, ob die Deklaration (nicht Definition) legal in einem Namespace ist, der die ursprüngliche Deklaration nicht einschließt?