struct S { int (*a)(int) = [](int x) { return x * 2; }; int b(int x, int (*f)(int) = [](int x) { return x * 3; }) { return f(x); } static int c(int x, int (*f)(int) = [](int x) { return x * 4; }) { return f(x); } }; // this is an ODR violation to include this header in multiple TUs // (the lambda is a different type in each TU, see [basic.def.odr] p15.6); // keep the check that we can emit the lambda from a header unit, // but skip it when checking ODR deduplication. #ifndef CHECK_ODR_VIOLATIONS inline int d(int x, int (*f)(int) = [](int x) { return x * 5; }) { return f(x); } #endif // unevaluated lambdas #if __cplusplus >= 202002L struct E : decltype([](int x) { return x * 6; }) { decltype([](int x) { return x * 7; }) f; }; template <typename T> struct G : decltype([](int x) { return x * 8; }) { decltype([](int x) { return x * 9; }) h; }; template <> struct G<double> : decltype([](int x) { return x * 10; }) { decltype([](int x) { return x * 11; }) i; }; #endif // concepts #if __cpp_concepts >= 201907L template <typename T> concept J = requires { []{ T(); }; }; template <typename T> concept K = []{ return sizeof(T) == 1; }(); #endif