xref: /llvm-project/clang/test/Parser/cxx1z-using-declaration.cpp (revision 151c4568581f1d6aea266aceb99f7cc683bfc10c)
16f1daa46SRichard Smith // RUN: %clang_cc1 -std=c++1z -verify %s
26f1daa46SRichard Smith 
36f1daa46SRichard Smith namespace A {
46f1daa46SRichard Smith   int m, n;
56f1daa46SRichard Smith };
66f1daa46SRichard Smith 
76f1daa46SRichard Smith namespace B {
86f1daa46SRichard Smith   using A::m, A::n, A::n;
96f1daa46SRichard Smith   int q = m + n;
106f1daa46SRichard Smith }
116f1daa46SRichard Smith 
126f1daa46SRichard Smith struct X {
13*151c4568SRichard Smith   int x1, x2, y, z; // expected-note 2{{conflicting}}
146f1daa46SRichard Smith };
156f1daa46SRichard Smith struct Y {
16*151c4568SRichard Smith   int x1, x2, y, z; // expected-note 2{{target}}
176f1daa46SRichard Smith };
186f1daa46SRichard Smith struct Z : X, Y {
196f1daa46SRichard Smith   using X::x1,
206f1daa46SRichard Smith         blah::blah, // expected-error {{undeclared}}
216f1daa46SRichard Smith         X::x2, // expected-note {{previous}}
226f1daa46SRichard Smith         Y::y,
236f1daa46SRichard Smith         X::x2, // expected-error {{redeclaration}}
246f1daa46SRichard Smith         X::z,
256f1daa46SRichard Smith         Y::z; // expected-error {{conflicts with}}
266f1daa46SRichard Smith };
276f1daa46SRichard Smith int X::*px1 = &Z::x1;
286f1daa46SRichard Smith int X::*px2 = &Z::x2;
296f1daa46SRichard Smith int Y::*py = &Z::y;
306f1daa46SRichard Smith int X::*pz = &Z::z;
31*151c4568SRichard Smith 
32*151c4568SRichard Smith template<typename ...T> struct Q : T... {
33*151c4568SRichard Smith   using T::z...; // expected-error {{conflicts}}
34*151c4568SRichard Smith };
35*151c4568SRichard Smith Q<X,Y> q; // expected-note {{instantiation of}}
36