1// RUN: %clang_cc1 -fsyntax-only -verify %s
2
3namespace A {
4    int VA;
5    void FA() {}
6    struct SA { int V; };
7}
8
9using A::VA;
10using A::FA;
11using typename A::SA;
12
13int main()
14{
15    VA = 1;
16    FA();
17    SA x;   //Still needs handling.
18}
19
20struct B {
21    void f(char){};
22    void g(char){};
23};
24struct D : B {
25    using B::f;
26    void f(int);
27    void g(int);
28};
29void D::f(int) { f('c'); } // calls B::f(char)
30void D::g(int) { g('c'); } // recursively calls D::g(int)
31
32namespace E {
33    template <typename TYPE> int funcE(TYPE arg) { return(arg); }
34}
35
36using E::funcE<int>; // expected-error{{using declaration can not refer to a template specialization}}
37
38namespace F {
39    struct X;
40}
41
42using F::X;
43// Should have some errors here.  Waiting for implementation.
44void X(int);
45struct X *x;
46
47
48namespace ShadowedTagNotes {
49
50namespace foo {
51  class Bar {};
52}
53
54void Bar(int); // expected-note{{class 'Bar' is hidden by a non-type declaration of 'Bar' here}}
55using foo::Bar;
56
57void ambiguity() {
58   const Bar *x; // expected-error{{must use 'class' tag to refer to type 'Bar' in this scope}}
59}
60
61} // namespace ShadowedTagNotes
62