1 // RUN: %clang_cc1 -fsyntax-only -verify %s
4 class String
; // expected-note {{target of using declaration}}
7 using A::String
; // expected-note {{using declaration}}
8 class String
; // expected-error {{conflicts with target of using declaration}}
14 namespace UnambiguousStaticMemberTemplate
{
15 // A static member template is not ambiguous if found in multiple base class
17 struct A
{ template<typename T
> static void f(T
); static void g(); };
18 struct B
: A
{ using A::f
; using A::g
; };
19 struct C
: A
{ using A::f
; using A::g
; };
21 void f(D d
) { d
.f(0); d
.g(); }
24 namespace UnambiguousReorderedMembers
{
25 // Static members are not ambiguous if we find them in a different order in
26 // multiple base classes.
27 struct A
{ static void f(); };
28 struct B
{ static void f(int); };
29 struct C
: A
, B
{ using A::f
; using B::f
; }; // expected-note {{found}}
30 struct D
: B
, A
{ using B::f
; using A::f
; };
32 void f(E e
) { e
.f(0); }
34 // But a different declaration set in different base classes does result in ambiguity.
35 struct X
: B
, A
{ using B::f
; using A::f
; static void f(int, int); }; // expected-note {{found}}
37 void g(Y y
) { y
.f(0); } // expected-error {{found in multiple base classes of different types}}