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