// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s // expected-no-diagnostics template constexpr bool is_same_v = false; template constexpr bool is_same_v = true; template concept is_same = is_same_v; template struct X {}; template concept C1 = is_same>; template X>> t1() { return [](T2) -> X> { struct S { static X> f() { return [](T3) -> X { static_assert(is_same>); static_assert(is_same>); return X(); }(X()); } }; return S::f(); }(X()); }; template X>> t1(); #if 0 // FIXME: crashes template auto t2() { return [](T2) { struct S { static auto f() { return [](T3) { static_assert(is_same>); static_assert(is_same>); return X(); }(X()); } }; return S::f(); }(X()); }; template auto t2(); static_assert(is_same()), X>>>); template C1>> auto t3() { return [] T2>(T2) -> C1> auto { struct S { static auto f() { return [] T3>(T3) -> C1 auto { return X(); }(X()); } }; return S::f(); }(X()); }; template C1>> auto t3(); static_assert(is_same()), X>>>); #endif