// P0018R3 - C++17 lambda capture of *this
// { dg-do compile { target c++11 } }

struct A {
  int a;
  void foo () {
    int v = 4;
    auto b = [*this, this] {};		// { dg-error "already captured 'this'" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto c = [this, *this] {};		// { dg-error "already captured 'this'" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto d = [this] { return a; };
    auto e = [*this] { return a; };	// { dg-error "'*this' capture only available with" "" { target c++14_down } }
    auto f = [this] { a++; };
    auto g = [*this] { a++; };		// { dg-error "in read-only object" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto h = [*this] () mutable { a++; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
    auto i = [=] { return a; };		// { dg-warning "implicit capture" "" { target c++2a } }
    auto j = [&] { return a; };
    // P0409R2 - C++2A lambda capture [=, this]
    auto k = [=, this] { return a; };// { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } }
    auto l = [&, this] { return a; };
    auto m = [=, *this] { return a; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
    auto n = [&, *this] { return a; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
    auto o = [*this, &v] { return a + v; };// { dg-error "'*this' capture only available with" "" { target c++14_down } }
    auto p = [*this] { this = 0; };	// { dg-error "lvalue required as left operand of assignment" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto q = [=, this, *this] { return a; };// { dg-error "already captured 'this'" }
					    // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
					    // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-2 }
    auto r = [=, this, this] { return a; };// { dg-error "already captured 'this'" }
					   // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-1 }
    auto s = [=, *this, this] { return a; };// { dg-error "already captured 'this'" }
					    // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
					    // { dg-error "explicit by-copy capture of 'this' redundant with by-copy capture default" "" { target c++17_down } .-2 }
    auto t = [=, *this, *this] { return a; };// { dg-error "already captured 'this'" }
					     // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto u = [&, this, *this] { return a; };// { dg-error "already captured 'this'" }
					    // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto w = [&, this, this] { return a; };// { dg-error "already captured 'this'" }
    auto x = [&, *this, this] { return a; };// { dg-error "already captured 'this'" }
					    // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto y = [&, *this, *this] { return a; };// { dg-error "already captured 'this'" }
					     // { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
  }
};
struct B {
  double b;
  B () : b (.007) {}
  double foo () {
    return [this]{ return [*this] { return b; }; }()();	// { dg-error "'*this' capture only available with" "" { target c++14_down } }
  }
  void bar () {
    auto c = []{ return [*this] { return b; }; };	// { dg-error "'this' was not captured for this lambda function" }
  }							// { dg-error "invalid use of non-static data member 'B::b'" "" { target *-*-* } .-1 }
};							// { dg-error "'*this' capture only available with" "" { target c++14_down } .-2 }
struct C {
  int c;
  C (const C &) = delete;
  void bar () const;
  void foo () {
    auto d = [this] { return c; };
    auto e = [*this] { return c; };	// { dg-error "use of deleted function" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto f = [=] { return c; };		// { dg-warning "implicit capture" "" { target c++2a } }
    auto g = [&] { return c; };
    auto h = [this] { bar (); };
    auto i = [*this] { bar (); };	// { dg-error "use of deleted function" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
  }
};
struct D {
  int d;
  ~D () = delete;
  void bar () const;
  void foo () {
    auto e = [this] { return d; };
    auto f = [*this] { return d; };	// { dg-error "use of deleted function" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
    auto g = [=] { return d; };		// { dg-warning "implicit capture" "" { target c++2a } }
    auto h = [&] { return d; };
    auto i = [this] { bar (); };
    auto j = [*this] { bar (); };	// { dg-error "use of deleted function" }
					// { dg-error "'*this' capture only available with" "" { target c++14_down } .-1 }
  }
};
