aboutsummaryrefslogtreecommitdiff
path: root/test/SemaCXX/lambda-expressions.cpp
blob: cacd4b680ce9274311d89a6e18c2fd0418cdab2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s

namespace std { class type_info; };

namespace ExplicitCapture {
  class C {
    int Member;

    static void Overload(int);
    void Overload();
    virtual C& Overload(float);

    void ImplicitThisCapture() {
      [](){(void)Member;}; // expected-error {{'this' cannot be implicitly captured in this context}} expected-error {{not supported yet}}
      [&](){(void)Member;}; // expected-error {{not supported yet}}
      // FIXME: 'this' captures below don't actually work yet
      // FIXME: [this](){(void)Member;};
      // FIXME: [this]{[this]{};};
      []{[this]{};};// expected-error {{'this' cannot be implicitly captured in this context}} expected-error 2 {{not supported yet}}
      []{Overload(3);}; // expected-error {{not supported yet}}
      []{Overload();}; // expected-error {{'this' cannot be implicitly captured in this context}} expected-error {{not supported yet}}
      []{(void)typeid(Overload());};// expected-error {{not supported yet}}
      []{(void)typeid(Overload(.5f));};// expected-error {{'this' cannot be implicitly captured in this context}} expected-error {{not supported yet}}
    }
  };

  void f() {
    [this] () {}; // expected-error {{invalid use of 'this'}} expected-error {{not supported yet}}
  }
}

namespace ReturnDeduction {
  void test() {
    [](){ return 1; }; // expected-error {{not supported yet}}
    [](){ return 1; }; // expected-error {{not supported yet}}
    [](){ return ({return 1; 1;}); }; // expected-error {{not supported yet}}
    [](){ return ({return 'c'; 1;}); }; // expected-error {{not supported yet}} expected-error {{must match previous return type}}
    []()->int{ return 'c'; return 1; }; // expected-error {{not supported yet}}
    [](){ return 'c'; return 1; }; // expected-error {{not supported yet}} expected-error {{must match previous return type}}
    []() { return; return (void)0; }; // expected-error {{not supported yet}}
    // FIXME: Need to check structure of lambda body 
    [](){ return 1; return 1; }; // expected-error {{not supported yet}}
  }
}