p4.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
  2. // RUN: %clang_cc1 -fsyntax-only -std=c++1y %s -verify -DCPP1Y
  3. void missing_lambda_declarator() {
  4. [](){}();
  5. }
  6. template<typename T> T get();
  7. void infer_void_return_type(int i) {
  8. if (i > 17)
  9. return []() { }();
  10. if (i > 11)
  11. return []() { return; }();
  12. return [](int x) {
  13. switch (x) {
  14. case 0: return get<void>();
  15. case 1: return;
  16. case 2: return { 1, 2.0 }; //expected-error{{cannot deduce}}
  17. }
  18. }(7);
  19. }
  20. struct X { };
  21. X infer_X_return_type(X x) {
  22. return [&x](int y) {
  23. if (y > 0)
  24. return X();
  25. else
  26. return x;
  27. }(5);
  28. }
  29. X infer_X_return_type_2(X x) {
  30. return [x](int y) {
  31. if (y > 0)
  32. return X();
  33. else
  34. return x; // ok even in c++11, per dr1048.
  35. }(5);
  36. }
  37. struct Incomplete; // expected-note{{forward declaration of 'Incomplete'}}
  38. void test_result_type(int N) {
  39. auto l1 = [] () -> Incomplete { }; // expected-error{{incomplete result type 'Incomplete' in lambda expression}}
  40. typedef int vla[N];
  41. auto l2 = [] () -> vla { }; // expected-error{{function cannot return array type 'vla' (aka 'int [N]')}}
  42. }