// RUN: %clang_cc1 -std=c++20 -x c++ -Wno-constant-logical-operand -verify %s template concept C = sizeof(T) == 4 && !true; // requires atomic constraints sizeof(T) == 4 and !true template concept C2 = sizeof(T); // expected-error{{atomic constraint must be of type 'bool' (found }} template struct S { constexpr operator bool() const { return true; } }; // expected-error@+3{{atomic constraint must be of type 'bool' (found 'S')}} // expected-note@#FINST{{while checking constraint satisfaction}} // expected-note@#FINST{{in instantiation of function template specialization}} template requires (S{}) void f(T); void f(int); // Ensure this applies to operator && as well. // expected-error@+3{{atomic constraint must be of type 'bool' (found 'S')}} // expected-note@#F2INST{{while checking constraint satisfaction}} // expected-note@#F2INST{{in instantiation of function template specialization}} template requires (S{} && true) void f2(T); void f2(int); template requires requires { requires S{}; // expected-error@-1{{atomic constraint must be of type 'bool' (found 'S')}} // expected-note@-2{{while checking the satisfaction}} // expected-note@-3{{in instantiation of requirement}} // expected-note@-4{{while checking the satisfaction}} // expected-note@-6{{while substituting template arguments}} // expected-note@#F3INST{{while checking constraint satisfaction}} // expected-note@#F3INST{{in instantiation of function template specialization}} // } void f3(T); void f3(int); // Doesn't diagnose, since this is no longer a compound requirement. template requires (bool(1 && 2)) void f4(T); void f4(int); void g() { f(0); // #FINST f2(0); // #F2INST f3(0); // #F3INST f4(0); } template auto Nullptr = nullptr; template concept NullTy = Nullptr; // expected-error@-1{{atomic constraint must be of type 'bool' (found }} // expected-note@+1{{while checking the satisfaction}} static_assert(NullTy); template auto Struct = S{}; template concept StructTy = Struct; // expected-error@-1{{atomic constraint must be of type 'bool' (found 'S')}} // expected-note@+1{{while checking the satisfaction}} static_assert(StructTy);