template<class T> T id(T t);
template<class ... Ts> int vfoo(Ts&& ... ts);
auto GL1 = [](auto a, int i) -> int { return id(a); };
auto GL2 = [](auto ... As) -> int { return vfoo(As...); };
auto GL3 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); };
auto GL4 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); };
void foo() {
auto GL1 = [](auto a, int i) -> int { return id(a); };
auto GL2 = [](auto ... As) -> int { return vfoo(As...); };
}
int main()
{
auto l1 = [](auto a) -> int { return a + 5; };
auto l2 = [](auto *p) -> int { return p + 5; };
struct A { int i; char f(int) { return 'c'; } };
auto l3 = [](auto &&ur,
auto &lr,
auto v,
int i,
auto* p,
auto A::*memvar,
auto (A::*memfun)(int),
char c,
decltype (v)* pv
, auto (&array)[5]
) -> int { return v + i + c
+ array[0];
};
int arr[5] = {0, 1, 2, 3, 4 };
int lval = 0;
double d = 3.14;
l3(3, lval, d, lval, &lval, &A::i, &A::f, 'c', &d, arr);
auto l4 = [](decltype(auto) a) -> int { return 0; }; {
struct Local {
static int ifi(int i) { return i; }
static char cfi(int) { return 'a'; }
static double dfi(int i) { return i + 3.14; }
static Local localfi(int) { return Local{}; }
};
auto l4 = [](auto (*fp)(int)) -> int { return fp(3); }; l4(&Local::ifi);
l4(&Local::cfi);
l4(&Local::dfi);
l4(&Local::localfi); }
{
auto unnamed_parameter = [](auto, auto) -> void { };
unnamed_parameter(3, '4');
}
{
auto l = [](auto
(*)(auto)) { }; auto l2 = [](char auto::*pm) { }; auto l3 = [](char (auto::*pmf)()) { }; }
}