Ambiguous Name Lookup mit using-Direktive

Es ist nicht zulässig, einen Namespace und eine Klasse mit demselben Namen in einen deklarativen Bereich zu setzen, d. H.

namespace A {}
class A{};

ist schlecht geformt (siehe §3.3.1 / 4). Sie können jedoch den Namen einer der beiden über eine using-Direktive eingeben:

namespace N { namespace A {int i;} }

struct A {static int i;};

using namespace N;

int i = A::i; // The global struct, or namespace N::A?

Ist dieser Code falsch? VC ++ denkt so, ebenso gut wie Clang:

main.cpp:7:9: error: reference to 'A' is ambiguous
int i = A::i;
        ^
main.cpp:3:8: note: candidate found by name lookup is 'A'
struct A {static int i;};
       ^
main.cpp:1:25: note: candidate found by name lookup is 'N::A'
namespace N { namespace A {int i;} }
                        ^

Jedoch,GCC akzeptiert es.

Wer hat Recht

Antworten auf die Frage(2)

Ihre Antwort auf die Frage