1 | // RUN: c-index-test -test-load-source all %s -fno-delayed-template-parsing | FileCheck %s |
2 | template<typename MyBase> |
3 | struct Derived: MyBase::InnerIterator |
4 | { |
5 | Derived() : MyBase::InnerIterator() {} |
6 | // CHECK: TypeRef=MyBase:2:19 Extent=[5:17 - 5:23] |
7 | }; |
8 | |
9 | template<typename MyBase> |
10 | struct Derived2: MyBase::Deeper::InnerIterator |
11 | { |
12 | Derived2() : MyBase::Deeper::InnerIterator() {} |
13 | // CHECK: TypeRef=MyBase:9:19 Extent=[12:18 - 12:24] |
14 | }; |
15 | |
16 | template<typename Q> |
17 | struct Templ; |
18 | |
19 | template<typename MyBase> |
20 | struct Derived3: Templ<MyBase>::InnerIterator |
21 | { |
22 | Derived3() : Templ<MyBase>::InnerIterator() {} |
23 | // CHECK: TemplateRef=Templ:17:8 Extent=[22:18 - 22:23] |
24 | // CHECK: TypeRef=MyBase:19:19 Extent=[22:24 - 22:30] |
25 | }; |
26 | |
27 | |
28 | struct Outer { |
29 | template <typename Q> |
30 | struct Inner { |
31 | typedef Q Parm; |
32 | }; |
33 | }; |
34 | |
35 | template<typename Q> |
36 | struct Derived4: Outer::Inner<Q>::Parm |
37 | { |
38 | Derived4() : Outer::Inner<Q>::Parm() {} |
39 | // CHECK: TypeRef=struct Outer:28:8 Extent=[38:18 - 38:23] |
40 | // CHECK: TemplateRef=Inner:30:12 Extent=[38:25 - 38:30] |
41 | // CHECK: TypeRef=Q:35:19 Extent=[38:31 - 38:32] |
42 | }; |
43 | |
44 | template<typename Q> |
45 | struct Derived5: Outer::Inner<Q>::Parm::InnerIterator |
46 | { |
47 | Derived5() : Outer::Inner<Q>::Parm::InnerIterator() {} |
48 | // CHECK: TypeRef=struct Outer:28:8 Extent=[47:18 - 47:23] |
49 | // CHECK: TemplateRef=Inner:30:12 Extent=[47:25 - 47:30] |
50 | // CHECK: TypeRef=Q:44:19 Extent=[47:31 - 47:32] |
51 | }; |
52 | |
53 | template<typename Q> |
54 | struct Derived6: Outer::Inner<Q> |
55 | { |
56 | Derived6() : Outer::Inner<Q>() {} |
57 | // CHECK: TypeRef=struct Outer:28:8 Extent=[56:18 - 56:23] |
58 | // CHECK: TemplateRef=Inner:30:12 Extent=[56:25 - 56:30] |
59 | // CHECK: TypeRef=Q:53:19 Extent=[56:31 - 56:32] |
60 | }; |
61 | |
62 | struct Base {}; |
63 | |
64 | struct Derived7: Outer::Inner<Base>::Parm |
65 | { |
66 | Derived7() : Outer::Inner<Base>::Parm() {} |
67 | // CHECK: TypeRef=struct Outer:28:8 Extent=[66:18 - 66:23] |
68 | // CHECK: TemplateRef=Inner:30:12 Extent=[66:25 - 66:30] |
69 | // CHECK: TypeRef=struct Base:62:8 Extent=[66:31 - 66:35] |
70 | }; |
71 | |
72 | struct Derived8: Outer::Inner<Base> |
73 | { |
74 | Derived8() : Outer::Inner<Base>() {} |
75 | // CHECK: TypeRef=struct Outer:28:8 Extent=[74:18 - 74:23] |
76 | // CHECK: TemplateRef=Inner:30:12 Extent=[74:25 - 74:30] |
77 | // CHECK: TypeRef=struct Base:62:8 Extent=[74:31 - 74:35] |
78 | }; |
79 | |
80 | namespace Namespace { |
81 | template<typename Q> struct Templ; |
82 | |
83 | struct Outer { |
84 | template <typename Q> |
85 | struct Inner { |
86 | typedef Q Parm; |
87 | }; |
88 | }; |
89 | } |
90 | |
91 | template<typename MyBase> |
92 | struct Derived9: Namespace::Templ<MyBase>::InnerIterator |
93 | { |
94 | Derived9() : Namespace::Templ<MyBase>::InnerIterator() {} |
95 | // CHECK: NamespaceRef=Namespace:80:11 Extent=[94:18 - 94:27] |
96 | // CHECK: TemplateRef=Templ:81:33 Extent=[94:29 - 94:34] |
97 | // CHECK: TypeRef=MyBase:91:19 Extent=[94:35 - 94:41] |
98 | }; |
99 | |
100 | template<typename MyBase> |
101 | struct Derived10: Namespace::Templ<MyBase> |
102 | { |
103 | Derived10() : Namespace::Templ<MyBase>() {} |
104 | // CHECK: NamespaceRef=Namespace:80:11 Extent=[103:19 - 103:28] |
105 | // CHECK: TemplateRef=Templ:81:33 Extent=[103:30 - 103:35] |
106 | // CHECK: TypeRef=MyBase:100:19 Extent=[103:36 - 103:42] |
107 | }; |
108 | |
109 | template<typename MyBase> |
110 | struct Derived11: Namespace::Outer::Inner<MyBase>::Parm |
111 | { |
112 | Derived11() : Namespace::Outer::Inner<MyBase>::Parm() {} |
113 | // CHECK: NamespaceRef=Namespace:80:11 Extent=[112:19 - 112:28] |
114 | // CHECK: TypeRef=struct Namespace::Outer:83:12 Extent=[112:30 - 112:35] |
115 | // CHECK: TemplateRef=Inner:85:16 Extent=[112:37 - 112:42] |
116 | // CHECK: TypeRef=MyBase:109:19 Extent=[112:43 - 112:49] |
117 | }; |
118 | |