1fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++1y -DCXX1Y 2fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 3fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali//FIXME: These tests were written when return type deduction had not been implemented 4fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali// for generic lambdas, hence 5fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valitemplate<class T> T id(T t); 6fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valitemplate<class ... Ts> int vfoo(Ts&& ... ts); 7fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valiauto GL1 = [](auto a, int i) -> int { return id(a); }; 8fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 9fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valiauto GL2 = [](auto ... As) -> int { return vfoo(As...); }; 10fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valiauto GL3 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); }; 11fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 12fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valiauto GL4 = [](int i, char c, auto* ... As) -> int { return vfoo(As...); }; 13fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 14fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 15fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valivoid foo() { 16fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto GL1 = [](auto a, int i) -> int { return id(a); }; 17fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 18fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto GL2 = [](auto ... As) -> int { return vfoo(As...); }; 19fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali} 20fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 21fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Valiint main() 22fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali{ 23fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l1 = [](auto a) -> int { return a + 5; }; 24fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l2 = [](auto *p) -> int { return p + 5; }; 25fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 26fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali struct A { int i; char f(int) { return 'c'; } }; 27fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l3 = [](auto &&ur, 28fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto &lr, 29fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto v, 30fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali int i, 31fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto* p, 32fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto A::*memvar, 33fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto (A::*memfun)(int), 34fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali char c, 35fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali decltype (v)* pv 36fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali , auto (&array)[5] 37fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali ) -> int { return v + i + c 38fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali + array[0]; 39fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali }; 40fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali int arr[5] = {0, 1, 2, 3, 4 }; 41fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali int lval = 0; 42fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali double d = 3.14; 43fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali l3(3, lval, d, lval, &lval, &A::i, &A::f, 'c', &d, arr); 44fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l4 = [](decltype(auto) a) -> int { return 0; }; //expected-error{{decltype(auto)}} 45fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali { 46fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali struct Local { 47fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali static int ifi(int i) { return i; } 48fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali static char cfi(int) { return 'a'; } 49fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali static double dfi(int i) { return i + 3.14; } 50fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali static Local localfi(int) { return Local{}; } 51fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali }; 52fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l4 = [](auto (*fp)(int)) -> int { return fp(3); }; //expected-error{{no viable conversion from 'Local' to 'int'}} 53fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali l4(&Local::ifi); 54fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali l4(&Local::cfi); 55fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali l4(&Local::dfi); 56fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali l4(&Local::localfi); //expected-note{{in instantiation of function template specialization}} 57fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali } 58fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali { 59fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto unnamed_parameter = [](auto, auto) -> void { }; 60fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali unnamed_parameter(3, '4'); 61fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali } 62fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali { 63fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l = [](auto 64fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali (*)(auto)) { }; //expected-error{{'auto' not allowed}} 65fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali //FIXME: These diagnostics might need some work. 66fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l2 = [](char auto::*pm) { }; //expected-error{{cannot combine with previous}}\ 67fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali expected-error{{'pm' does not point into a class}} 68fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali auto l3 = [](char (auto::*pmf)()) { }; //expected-error{{'auto' not allowed}}\ 69fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali expected-error{{'pmf' does not point into a class}}\ 70fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali expected-error{{function cannot return function type 'char ()'}} 71fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali } 72fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali} 73fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 74fad9e13f3cb85198f0ee5af620ba81cd78574faaFaisal Vali 75