xref: /llvm-project/clang-tools-extra/test/clang-doc/templates.cpp (revision 2b932bc111c0d96db7044b0a854d7ad763710df2)
14a68babdSBrett Wilson // RUN: rm -rf %t
24a68babdSBrett Wilson // RUN: mkdir %t
352e25912SPaul Kirth 
47d764db9SPaul Kirth // RUN: clang-doc --doxygen --executor=standalone %s -output=%t/docs
5bc627a46SPaul Kirth // RUN: cat %t/docs/index.yaml | FileCheck %s --check-prefix=YAML
64a68babdSBrett Wilson 
752e25912SPaul Kirth // RUN: clang-doc --doxygen --executor=standalone %s -output=%t/docs --format=md
852e25912SPaul Kirth // RUN: cat %t/docs/GlobalNamespace/index.md | FileCheck %s --check-prefix=MD
952e25912SPaul Kirth 
10b8569528SPaul Kirth // YAML: ---
11b8569528SPaul Kirth // YAML-NEXT: USR:             '{{([0-9A-F]{40})}}'
12e113a725SPaul Kirth // YAML-NEXT: ChildRecords:
13e113a725SPaul Kirth // YAML-NEXT:   - Type:            Record
14e113a725SPaul Kirth // YAML-NEXT:     Name:            'tuple'
15e113a725SPaul Kirth // YAML-NEXT:     QualName:        'tuple'
16e113a725SPaul Kirth // YAML-NEXT:     USR:             '{{([0-9A-F]{40})}}'
17e113a725SPaul Kirth // YAML-NEXT:     Path:            'GlobalNamespace'
184a68babdSBrett Wilson 
1952e25912SPaul Kirth // MD: # Global Namespace
2052e25912SPaul Kirth // MD: ## Functions
2152e25912SPaul Kirth 
224a68babdSBrett Wilson template<class... T>
234a68babdSBrett Wilson void ParamPackFunction(T... args);
244a68babdSBrett Wilson 
25bc627a46SPaul Kirth // YAML-NEXT: ChildFunctions:
26bc627a46SPaul Kirth // YAML-NEXT:  - USR:             '{{([0-9A-F]{40})}}'
27bc627a46SPaul Kirth // YAML-NEXT:    Name:            'ParamPackFunction'
28bc627a46SPaul Kirth // YAML-NEXT:    Location:
29b8569528SPaul Kirth // YAML-NEXT:      - LineNumber:      [[# @LINE - 6]]
30bc627a46SPaul Kirth // YAML-NEXT:        Filename:        '{{.*}}'
31bc627a46SPaul Kirth // YAML-NEXT:    Params:
32bc627a46SPaul Kirth // YAML-NEXT:      - Type:
33bc627a46SPaul Kirth // YAML-NEXT:          Name:            'T...'
34bc627a46SPaul Kirth // YAML-NEXT:          QualName:        'T...'
35bc627a46SPaul Kirth // YAML-NEXT:        Name:            'args'
36bc627a46SPaul Kirth // YAML-NEXT:    ReturnType:
37bc627a46SPaul Kirth // YAML-NEXT:      Type:
38bc627a46SPaul Kirth // YAML-NEXT:        Name:            'void'
39bc627a46SPaul Kirth // YAML-NEXT:        QualName:        'void'
40bc627a46SPaul Kirth // YAML-NEXT:    Template:
41bc627a46SPaul Kirth // YAML-NEXT:      Params:
42bc627a46SPaul Kirth // YAML-NEXT:        - Contents:        'class... T'
43b8569528SPaul Kirth 
4452e25912SPaul Kirth // MD: ### ParamPackFunction
4552e25912SPaul Kirth // MD: *void ParamPackFunction(T... args)*
4652e25912SPaul Kirth 
47b8569528SPaul Kirth template<typename T, int U = 1>
48b8569528SPaul Kirth void function(T x) {}
49b8569528SPaul Kirth 
50bc627a46SPaul Kirth // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
51bc627a46SPaul Kirth // YAML-NEXT:     Name:            'function'
52bc627a46SPaul Kirth // YAML-NEXT:     DefLocation:
53b8569528SPaul Kirth // YAML-NEXT:       LineNumber:      [[# @LINE - 5]]
54bc627a46SPaul Kirth // YAML-NEXT:       Filename:        '{{.*}}'
55bc627a46SPaul Kirth // YAML-NEXT:     Params:
56bc627a46SPaul Kirth // YAML-NEXT:       - Type:
57bc627a46SPaul Kirth // YAML-NEXT:           Name:            'T'
58bc627a46SPaul Kirth // YAML-NEXT:           QualName:        'T'
59bc627a46SPaul Kirth // YAML-NEXT:         Name:            'x'
60bc627a46SPaul Kirth // YAML-NEXT:     ReturnType:
61bc627a46SPaul Kirth // YAML-NEXT:       Type:
62bc627a46SPaul Kirth // YAML-NEXT:         Name:            'void'
63bc627a46SPaul Kirth // YAML-NEXT:         QualName:        'void'
64bc627a46SPaul Kirth // YAML-NEXT:     Template:
65bc627a46SPaul Kirth // YAML-NEXT:       Params:
66bc627a46SPaul Kirth // YAML-NEXT:         - Contents:        'typename T'
67bc627a46SPaul Kirth // YAML-NEXT:         - Contents:        'int U = 1'
68b8569528SPaul Kirth 
6952e25912SPaul Kirth // MD: ### function
7052e25912SPaul Kirth // MD: *void function(T x)*
7152e25912SPaul Kirth // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 23]]*
7252e25912SPaul Kirth 
73b8569528SPaul Kirth template<>
74b8569528SPaul Kirth void function<bool, 0>(bool x) {}
75b8569528SPaul Kirth 
76bc627a46SPaul Kirth // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
77bc627a46SPaul Kirth // YAML-NEXT:     Name:            'function'
78bc627a46SPaul Kirth // YAML-NEXT:     DefLocation:
79b8569528SPaul Kirth // YAML-NEXT:       LineNumber:      [[# @LINE - 6]]
80bc627a46SPaul Kirth // YAML-NEXT:       Filename:        '{{.*}}'
81bc627a46SPaul Kirth // YAML-NEXT:     Params:
82bc627a46SPaul Kirth // YAML-NEXT:       - Type:
83*2b932bc1SPaul Kirth // YAML-NEXT:           Name:            'bool'
84*2b932bc1SPaul Kirth // YAML-NEXT:           QualName:        'bool'
85bc627a46SPaul Kirth // YAML-NEXT:         Name:            'x'
86bc627a46SPaul Kirth // YAML-NEXT:     ReturnType:
87bc627a46SPaul Kirth // YAML-NEXT:       Type:
88bc627a46SPaul Kirth // YAML-NEXT:         Name:            'void'
89bc627a46SPaul Kirth // YAML-NEXT:         QualName:        'void'
90bc627a46SPaul Kirth // YAML-NEXT:     Template:
91bc627a46SPaul Kirth // YAML-NEXT:       Specialization:
92bc627a46SPaul Kirth // YAML-NEXT:         SpecializationOf: '{{([0-9A-F]{40})}}'
93bc627a46SPaul Kirth // YAML-NEXT:         Params:
94bc627a46SPaul Kirth // YAML-NEXT:           - Contents:        'bool'
95bc627a46SPaul Kirth // YAML-NEXT:           - Contents:        '0'
96b8569528SPaul Kirth 
9752e25912SPaul Kirth // MD: ### function
98*2b932bc1SPaul Kirth // MD: *void function(bool x)*
99e113a725SPaul Kirth // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 26]]*
100e113a725SPaul Kirth 
101e113a725SPaul Kirth /// A Tuple type
102e113a725SPaul Kirth ///
103e113a725SPaul Kirth /// Does Tuple things.
104e113a725SPaul Kirth template<typename ...Tys>
105e113a725SPaul Kirth struct tuple{};
106e113a725SPaul Kirth 
107e113a725SPaul Kirth /// A function with a tuple parameter
108e113a725SPaul Kirth ///
109e113a725SPaul Kirth /// \param t The input to func_with_tuple_param
110e113a725SPaul Kirth tuple<int,int,bool> func_with_tuple_param(tuple<int,int,bool> t){ return t;}
111e113a725SPaul Kirth 
112e113a725SPaul Kirth // YAML-NEXT:   - USR:             '{{([0-9A-F]{40})}}'
113e113a725SPaul Kirth // YAML-NEXT:    Name:            'func_with_tuple_param'
114e113a725SPaul Kirth // YAML-NEXT:    Description:
115e113a725SPaul Kirth // YAML-NEXT:      - Kind:            'FullComment'
116e113a725SPaul Kirth // YAML-NEXT:        Children:
117e113a725SPaul Kirth // YAML-NEXT:          - Kind:            'ParagraphComment'
118e113a725SPaul Kirth // YAML-NEXT:            Children:
119e113a725SPaul Kirth // YAML-NEXT:              - Kind:            'TextComment'
120e113a725SPaul Kirth // YAML-NEXT:                Text:            ' A function with a tuple parameter'
121e113a725SPaul Kirth // YAML-NEXT:          - Kind:            'ParagraphComment'
122e113a725SPaul Kirth // YAML-NEXT:            Children:
123e113a725SPaul Kirth // YAML-NEXT:              - Kind:            'TextComment'
124e113a725SPaul Kirth // YAML-NEXT:          - Kind:            'ParamCommandComment'
125e113a725SPaul Kirth // YAML-NEXT:            Direction:       '[in]'
126e113a725SPaul Kirth // YAML-NEXT:            ParamName:       't'
127e113a725SPaul Kirth // YAML-NEXT:            Children:
128e113a725SPaul Kirth // YAML-NEXT:              - Kind:            'ParagraphComment'
129e113a725SPaul Kirth // YAML-NEXT:                Children:
130e113a725SPaul Kirth // YAML-NEXT:                  - Kind:            'TextComment'
131e113a725SPaul Kirth // YAML-NEXT:                    Text:            ' The input to func_with_tuple_param'
132e113a725SPaul Kirth // YAML-NEXT:    DefLocation:
133e113a725SPaul Kirth // YAML-NEXT:      LineNumber:      [[# @LINE - 23]]
134e113a725SPaul Kirth // YAML-NEXT:      Filename:
135e113a725SPaul Kirth // YAML-NEXT:    Params:
136e113a725SPaul Kirth // YAML-NEXT:      - Type:
137e113a725SPaul Kirth // YAML-NEXT:          Type:            Record
138e113a725SPaul Kirth // YAML-NEXT:          Name:            'tuple'
139*2b932bc1SPaul Kirth // YAML-NEXT:          QualName:        'tuple<int, int, bool>'
140e113a725SPaul Kirth // YAML-NEXT:          USR:             '{{([0-9A-F]{40})}}'
141e113a725SPaul Kirth // YAML-NEXT:          Path:            'GlobalNamespace'
142e113a725SPaul Kirth // YAML-NEXT:        Name:            't'
143e113a725SPaul Kirth // YAML-NEXT:    ReturnType:
144e113a725SPaul Kirth // YAML-NEXT:      Type:
145e113a725SPaul Kirth // YAML-NEXT:        Type:            Record
146e113a725SPaul Kirth // YAML-NEXT:        Name:            'tuple'
147*2b932bc1SPaul Kirth // YAML-NEXT:        QualName:        'tuple<int, int, bool>'
148e113a725SPaul Kirth // YAML-NEXT:        USR:             '{{([0-9A-F]{40})}}'
149e113a725SPaul Kirth // YAML-NEXT:        Path:            'GlobalNamespace'
150e113a725SPaul Kirth // YAML-NEXT: ...
151e113a725SPaul Kirth 
152e113a725SPaul Kirth // MD: ### func_with_tuple_param
153*2b932bc1SPaul Kirth // MD: *tuple<int, int, bool> func_with_tuple_param(tuple<int, int, bool> t)*
154e113a725SPaul Kirth // MD: *Defined at {{.*}}templates.cpp#[[# @LINE - 44]]*
155e113a725SPaul Kirth // MD:  A function with a tuple parameter
156e113a725SPaul Kirth // MD: **t** The input to func_with_tuple_param
15752e25912SPaul Kirth 
158