1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | // expected-no-diagnostics |
3 | |
4 | namespace N { |
5 | enum { C }; |
6 | template<class T> class B { |
7 | void f(T); |
8 | }; |
9 | } |
10 | |
11 | template<class C> void N::B<C>::f(C) { |
12 | C b; |
13 | } |
14 | |
15 | namespace N { |
16 | enum { D }; |
17 | namespace M { |
18 | enum { C , D }; |
19 | template<typename C> class X { |
20 | template<typename U> void f(C, U); |
21 | |
22 | template<typename D> void g(C, D) { |
23 | C c; |
24 | D d; |
25 | } |
26 | }; |
27 | |
28 | struct Y { |
29 | template<typename U> void f(U); |
30 | }; |
31 | } |
32 | |
33 | struct Y { |
34 | template<typename D> void f(D); |
35 | }; |
36 | } |
37 | |
38 | template<typename C> |
39 | template<typename D> |
40 | void N::M::X<C>::f(C, D) { |
41 | C c; |
42 | D d; |
43 | } |
44 | |
45 | template<typename C> |
46 | void N::M::Y::f(C) { |
47 | C c; |
48 | } |
49 | |
50 | template<typename D> |
51 | void N::Y::f(D) { |
52 | D d; |
53 | } |
54 | |
55 | |