1// RUN: rm -rf %t && mkdir -p %t
2// RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s
3// RUN: FileCheck %s < %t/index.json
4
5template<typename T> concept Incrementable = requires (T a) {
6 a++;
7};
8
9template<typename T> concept Decrementable = requires (T a) {
10 a--;
11};
12
13template<typename T> concept PreIncrementable = requires (T a) {
14 ++a;
15};
16
17template<typename T> concept PreDecrementable = requires (T a) {
18 --a;
19};
20
21template<typename T> requires Incrementable<T> && Decrementable<T> void One();
22
23template<typename T> requires (Incrementable<T> && Decrementable<T>) void Two();
24
25template<typename T> requires (Incrementable<T> && Decrementable<T>) || (PreIncrementable<T> && PreDecrementable<T>) void Three();
26
27template<typename T> requires (Incrementable<T> && Decrementable<T>) || PreIncrementable<T> void Four();
28
29// CHECK: "Name": "One",
30// CHECK: "Template": {
31// CHECK-NEXT: "Constraints": [
32// CHECK-NEXT: {
33// CHECK-NEXT: "Expression": "Incrementable<T>",
34// CHECK-NEXT: "Name": "Incrementable",
35// CHECK-NEXT: "Path": "",
36// CHECK-NEXT: "QualName": "Incrementable",
37// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
38// CHECK-NEXT: },
39// CHECK-NEXT: {
40// CHECK-NEXT: "Expression": "Decrementable<T>",
41// CHECK-NEXT: "Name": "Decrementable",
42// CHECK-NEXT: "Path": "",
43// CHECK-NEXT: "QualName": "Decrementable",
44// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
45// CHECK-NEXT: }
46// CHECK-NEXT: ],
47// CHECK: "Name": "Two",
48// CHECK: "Template": {
49// CHECK-NEXT: "Constraints": [
50// CHECK-NEXT: {
51// CHECK-NEXT: "Expression": "Incrementable<T>",
52// CHECK-NEXT: "Name": "Incrementable",
53// CHECK-NEXT: "Path": "",
54// CHECK-NEXT: "QualName": "Incrementable",
55// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
56// CHECK-NEXT: },
57// CHECK-NEXT: {
58// CHECK-NEXT: "Expression": "Decrementable<T>",
59// CHECK-NEXT: "Name": "Decrementable",
60// CHECK-NEXT: "Path": "",
61// CHECK-NEXT: "QualName": "Decrementable",
62// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
63// CHECK-NEXT: }
64// CHECK-NEXT: ],
65// CHECK: "Name": "Three",
66// CHECK: "Template": {
67// CHECK-NEXT: "Constraints": [
68// CHECK-NEXT: {
69// CHECK-NEXT: "Expression": "Incrementable<T>",
70// CHECK-NEXT: "Name": "Incrementable",
71// CHECK-NEXT: "Path": "",
72// CHECK-NEXT: "QualName": "Incrementable",
73// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
74// CHECK-NEXT: },
75// CHECK-NEXT: {
76// CHECK-NEXT: "Expression": "Decrementable<T>",
77// CHECK-NEXT: "Name": "Decrementable",
78// CHECK-NEXT: "Path": "",
79// CHECK-NEXT: "QualName": "Decrementable",
80// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
81// CHECK-NEXT: },
82// CHECK-NEXT: {
83// CHECK-NEXT: "Expression": "PreIncrementable<T>",
84// CHECK-NEXT: "Name": "PreIncrementable",
85// CHECK-NEXT: "Path": "",
86// CHECK-NEXT: "QualName": "PreIncrementable",
87// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
88// CHECK-NEXT: },
89// CHECK-NEXT: {
90// CHECK-NEXT: "Expression": "PreDecrementable<T>",
91// CHECK-NEXT: "Name": "PreDecrementable",
92// CHECK-NEXT: "Path": "",
93// CHECK-NEXT: "QualName": "PreDecrementable",
94// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
95// CHECK-NEXT: }
96// CHECK-NEXT: ],
97// CHECK: "Name": "Four",
98// CHECK: "Template": {
99// CHECK-NEXT: "Constraints": [
100// CHECK-NEXT: {
101// CHECK-NEXT: "Expression": "Incrementable<T>",
102// CHECK-NEXT: "Name": "Incrementable",
103// CHECK-NEXT: "Path": "",
104// CHECK-NEXT: "QualName": "Incrementable",
105// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
106// CHECK-NEXT: },
107// CHECK-NEXT: {
108// CHECK-NEXT: "Expression": "Decrementable<T>",
109// CHECK-NEXT: "Name": "Decrementable",
110// CHECK-NEXT: "Path": "",
111// CHECK-NEXT: "QualName": "Decrementable",
112// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
113// CHECK-NEXT: },
114// CHECK-NEXT: {
115// CHECK-NEXT: "Expression": "PreIncrementable<T>",
116// CHECK-NEXT: "Name": "PreIncrementable",
117// CHECK-NEXT: "Path": "",
118// CHECK-NEXT: "QualName": "PreIncrementable",
119// CHECK-NEXT: "USR": "{{[0-9A-F]*}}"
120// CHECK-NEXT: }
121// CHECK-NEXT: ],
122

source code of clang-tools-extra/test/clang-doc/json/compound-constraints.cpp