// RUN: rm -rf %t && mkdir -p %t // RUN: clang-doc --pretty-json --extra-arg -std=c++20 --output=%t --doxygen --format=html --executor=standalone %s // RUN: FileCheck %s < %t/json/GlobalNamespace/index.json // RUN: FileCheck %s < %t/html/GlobalNamespace/index.html -check-prefix=CHECK-HTML /// \brief Concept for an incrementable value /// /// \tparam T A value that can be incremented. template concept Incrementable = requires (T a) { a++; }; /// \brief Concept for a decrementable value /// /// \tparam T A value that can be decremented template concept Decrementable = requires (T a) { a--; }; /// \brief Concept for a pre-incrementable value /// /// \tparam T A value that can be pre-incremented template concept PreIncrementable = requires (T a) { ++a; }; /// \brief Concept for a -pre-decrementable value /// /// \tparam T A value that can be pre-decremented 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: "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: "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: "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: "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: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // CHECK-NEXT: "QualName": "Decrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "PreIncrementable", // CHECK-NEXT: "Name": "PreIncrementable", // 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: "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: "QualName": "Incrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: }, // CHECK-NEXT: { // CHECK-NEXT: "Expression": "Decrementable", // CHECK-NEXT: "Name": "Decrementable", // 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: "QualName": "PreIncrementable", // CHECK-NEXT: "USR": "{{[0-9A-F]*}}" // CHECK-NEXT: } // CHECK-NEXT: ], // CHECK-HTML: Concepts // CHECK-HTML-NEXT: // CHECK-HTML-NEXT:
    // CHECK-HTML-NEXT: // CHECK-HTML-NEXT: // CHECK-HTML-NEXT: // CHECK-HTML-NEXT: // CHECK-HTML-NEXT:
// CHECK-HTML:
// CHECK-HTML-NEXT:

Concepts

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
template <typename T> Incrementable requires (T a) { a++; }
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Concept for an incrementable value

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Template Parameters

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT: T A value that can be incremented. // CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Defined at line [[@LINE-151]] of file {{.*}}compound-constraints.cpp

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
template <typename T> Decrementable requires (T a) { a--; }
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Concept for a decrementable value

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Template Parameters

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT: T A value that can be decremented // CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Defined at line [[@LINE-159]] of file {{.*}}compound-constraints.cpp

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
template <typename T> PreIncrementable requires (T a) { ++a; }
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Concept for a pre-incrementable value

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Template Parameters

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT: T A value that can be pre-incremented // CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Defined at line [[@LINE-167]] of file {{.*}}compound-constraints.cpp

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
template <typename T> PreDecrementable requires (T a) { --a; }
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Concept for a -pre-decrementable value

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Template Parameters

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT: T A value that can be pre-decremented // CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT:

Defined at line [[@LINE-175]] of file {{.*}}compound-constraints.cpp

// CHECK-HTML-NEXT:
// CHECK-HTML-NEXT: