// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++1y -DCXX1Y //FIXME: These tests were written when return type deduction had not been implemented // for generic lambdas, hence template T id(T t); template 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; }; //expected-error{{decltype(auto)}} { 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); }; //expected-error{{no viable conversion from returned value of type 'Local' to function return type 'int'}} l4(&Local::ifi); l4(&Local::cfi); l4(&Local::dfi); l4(&Local::localfi); //expected-note{{in instantiation of function template specialization}} } { auto unnamed_parameter = [](auto, auto) -> void { }; unnamed_parameter(3, '4'); } { auto l = [](auto (*)(auto)) { }; //expected-error{{'auto' not allowed}} //FIXME: These diagnostics might need some work. auto l2 = [](char auto::*pm) { }; //expected-error{{cannot combine with previous}}\ expected-error{{'pm' does not point into a class}} auto l3 = [](char (auto::*pmf)()) { }; //expected-error{{'auto' not allowed}}\ expected-error{{'pmf' does not point into a class}}\ expected-error{{function cannot return function type 'char ()'}} } }