// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify
bool r1 = ;
// expected-error@-1 {{a requires expression must contain at least one requirement}}
bool r2 = requires ;
bool r3 = ;
// expected-error@-1 {{varargs not allowed in requires expression}}
bool r4 = ;
bool r5 = ;
bool r6 = && decltype;
// expected-error@-1 {{use of undeclared identifier 'd'}}
bool r7 = && decltype && decltype;
// expected-error@-1 2{{use of undeclared identifier 'd'}}
// expected-error@-2 {{use of undeclared identifier 'c'}}
bool r8 = ;
bool r9 = ;
// expected-error@-1 {{redefinition of parameter 'a'}}
// expected-note@-2 {{previous declaration is here}}
bool r10 = ;
// expected-error@-1 {{'new_struct' cannot be defined in a parameter type}}
bool r11 = ;
// expected-error@-1 {{expected parameter declarator}}
// expected-error@-2 {{expected ')'}}
// expected-note@-3 {{to match this '('}}
bool r12 = ;
// expected-error@-1 {{default arguments not allowed for parameters of a requires expression}}
bool r13 = ;
bool r14 = ;
bool r15 = ;
// expected-error@-1 {{expected parameter declarator}}
// expected-error@-2 {{expected ')'}} expected-note@-2 {{to match}}
bool r16 = ;
// expected-error@-1 {{'auto' not allowed in requires expression parameter}}
bool r17 = ;
// expected-error@-1 {{'auto' not allowed in requires expression parameter}}
// expected-error@-2 {{use of undeclared identifier 'x'}}
using a = int;
bool r18 = requires ;
bool r19 = requires ;
;
using identity_t = T;
bool r20 = requires ;
;
bool r21 = requires ;
// expected-error@-1 {{expected an identifier or template-id after '::'}}
bool r22 = requires ;
// expected-error@-1 {{expected an identifier or template-id after '::'}}
bool r23 = requires ;
// expected-error@-1 {{use 'template' keyword to treat 'temp' as a dependent template name}}
bool r24 = requires ;
bool r25 = requires ;
// expected-error@-1 {{expected expression}}
bool r26 = requires ;
// expected-error@-1 {{expected expression}}
bool r27 = requires ;
bool r28 = requires ;
// expected-error@-1 {{expected '->' before expression type requirement}}
// expected-error@-2 {{expected concept name with optional arguments}}
concept C1 = true;
concept C2 = true;
bool r29 = requires ;
// expected-error@-1 {{expected '->' before expression type requirement}}
bool r30 = requires ;
bool r31 = requires ;
T i1 = 0;
bool r32 = requires ;
// expected-error@-1 {{expected ';' at end of requirement}}
bool r33 = requires ;
// expected-error@-1 {{'noexcept' can only be used in a compound requirement (with '{' '}' around the expression)}}
bool r34 = requires ;
// expected-error@-1 {{expected ';' at end of requirement}}
bool r35 = requires ;
// expected-error@-1 {{expected ';' at end of requirement}}
bool r36 = ;
void requires requires
// expected-error@-1 {{expected ';' at end of requirement}}
bool r38 = requires ;
// expected-error@-1 {{requires expression in requirement body; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}}
bool r39 = requires ;
// expected-error@-1 {{requires expression in requirement body; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}}
bool r40 = requires ;
// expected-error@-1 {{requires expression in requirement body; did you intend to place it in a nested requirement? (add another 'requires' before the expression)}}
bool r41 = requires ;
// expected-error@-1 {{expected expression}}
bool r42 = requires ; // expected-error {{expected a qualified name after 'typename'}}
requires requires using r43 = void;
using BitInt = ;
requires requires using r44 = void;