(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
cpp2a/
concepts-lambda14.C
// PR c++/96410
// { dg-do compile { target c++20 } }

struct S { using blah = void; };

template <typename T> constexpr bool trait = !__is_same(T, S);
template <typename T> concept C = trait<T>;

template<typename T>
void foo() noexcept(!__is_same(T, void)) { }

template<typename U>
auto f() {
  return []<typename T>(T, bool a = requires { C<T>; }){ // { dg-warning Wmissing-requires }
    static_assert(requires { requires C<U> && (C<T> || C<T>); }); // { dg-error "assert" }
    static_assert(requires { C<T>; }); // { dg-warning Wmissing-requires }
    static_assert(requires { { foo<T>() } noexcept -> C; });
    static_assert(!requires { typename T::blah; }); // { dg-error "assert" }
    return 0;
  };
}

auto g = f<int>(); // { dg-bogus "" }
int n = g(0); // { dg-bogus "" }
int m = g(S{}); // { dg-message "required from here" }