1 // { dg-do run { target c++20 } }
2 // { dg-do compile { target c++17_down } }
3 // { dg-excess-errors "" { target { c++17_down } } } (PR108972)
4 // { dg-additional-options "-flto" { target lto } } (PR107897)
7 concept C1 = __is_same_as(T, int)
8 || __is_same_as(T, long long)
9 || __is_same_as(T, char);
12 concept IsNotLarge = !__is_same_as(T, long long);
15 concept IsNotTiny = !__is_same_as(T, char);
17 template<IsNotLarge T>
20 static constexpr auto a = [](auto n) { return n; };
24 return [](auto n) { return n; };
28 using Func = int(*)(int);
32 auto g = []<C1 T> requires IsNotTiny<T>(T t) -> T
33 requires IsNotLarge<decltype(t)> { return t; };
35 g.operator()<int>(5.5);
37 auto z = []<typename T, int N = 5>(T t) requires (N < 4) { return t; };
38 z.operator()<int, 3>(5);
40 [](auto t) requires true { return t; }(5);
41 [](C1 auto t) { return t; }(5);
43 auto a0 = [](IsNotLarge auto a) { return [](auto b){ return b; }; };
47 auto b0 = [](auto a) { return [](IsNotLarge auto b){ return b; }; };
55 foo1.b<long long>()(5);
61 foo2.b<long long>()(5);
63 Func m1 = [](auto a) -> int requires true { return a; };