Es ist nicht erlaubt, einen Namespace und eine Klasse mit demselben Namen in eine deklarative Region zu setzen, d. h.
%Vor%ist schlecht gebildet (siehe §3.3.1 / 4). Man kann jedoch den Namen von beiden über eine using-Direktive eingeben:
%Vor%Ist dieser Code schlecht geformt? VC ++ denkt so , sowie Clang :
%Vor%
Wer hat Recht?
Der Code ist schlecht formatiert. Beim Nachschlagen von A
, §7.3.4 / 6 Schritte in:
Wenn die Namenssuche eine Deklaration für einen Namen in zwei verschiedenen findet Namespaces, und die Deklarationen deklarieren nicht dieselbe Entity und do Funktionen nicht erklären, die Verwendung des Namens ist schlecht gebildet.
Hier sind die Namespaces der globale Namespace und N
, und die Entitäten sind der Namespace N::A
und die Klasse ::A
.
Tags und Links c++ language-lawyer name-lookup qualified-name