// RUN: rm -rf %t && mkdir -p %t // RUN: clang-doc --extra-arg -std=c++20 --output=%t --format=json --executor=standalone %s // RUN: FileCheck %s < %t/index.json template concept Incrementable = requires (T a) { a++; }; template concept Decrementable = requires (T a) { a--; }; template concept PreIncrementable = requires (T a) { ++a; }; template concept PreDecrementable = requires (T a) { --a; }; template requires Incrementable && Decrementable void One(); template requires (Incrementable && Decrementable) void Two(); template requires (Incrementable && Decrementable) || (PreIncrementable && PreDecrementable) void Three(); template requires (Incrementable && Decrementable) || PreIncrementable void Four(); // CHECK: "Name": "One", // CHECK: "Template": { // CHECK-NEXT: "Constraints": [ // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Incrementable", // CHECK-NEXT: "Name": "Incrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Decrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK: "Name": "Two", // CHECK: "Template": { // CHECK-NEXT: "Constraints": [ // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Incrementable", // CHECK-NEXT: "Name": "Incrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Decrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK: "Name": "Three", // CHECK: "Template": { // CHECK-NEXT: "Constraints": [ // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Incrementable", // CHECK-NEXT: "Name": "Incrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Decrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "PreIncrementable", // CHECK-NEXT: "Name": "PreIncrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "PreIncrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Expression": "PreDecrementable", // CHECK-NEXT: "Name": "PreDecrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "PreDecrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK: "Name": "Four", // CHECK: "Template": { // CHECK-NEXT: "Constraints": [ // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Incrementable", // CHECK-NEXT: "Name": "Incrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "Decrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "End": true, // CHECK-NEXT: "Expression": "PreIncrementable", // CHECK-NEXT: "Name": "PreIncrementable", // CHECK-NEXT: "Path": "", // CHECK-NEXT: "QualName": "PreIncrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ],