Suche nach mehrdeutigem Namen mit using-directive

8

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%

GCC akzeptiert dies jedoch .

Wer hat Recht?

    
Columbo 26.04.2015, 21:48
quelle

1 Antwort

6

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 .

    
Columbo 26.04.2015, 21:48
quelle