// RUN: %clang_cc1 -emit-pch -std=c++2a -o %t %s // RUN: %clang_cc1 -std=c++2a -x ast -ast-print %t | FileCheck %s // RUN: %clang_cc1 -emit-pch -std=c++2a -fpch-instantiate-templates -o %t %s // RUN: %clang_cc1 -std=c++2a -x ast -ast-print %t | FileCheck %s template concept C = true; template concept C2 = true; template bool f() { // CHECK: requires (T t) { t++; { t++ } noexcept -> C; { t++ } -> C2; typename T::a; requires T::val; requires C || (C || C); }; return requires (T t) { t++; { t++ } noexcept -> C; { t++ } -> C2; typename T::a; requires T::val; requires C || (C || C); }; } namespace trailing_requires_expression { template requires C && C2 // CHECK: template requires C && C2 void g(); void g(); template requires C || C2 // CHECK: template requires C || C2 constexpr int h = sizeof(T); constexpr int h = sizeof(T); template requires C // CHECK: template requires C class i { // CHECK-NEXT: }; class i {}; }