blob: aff7a61273f79ed9cc281ac1007fa749b1718265 [file] [log] [blame]
// PR c++/77585
// { dg-do run { target c++14 } }
// Confusion about this capture when instantiating generic lambda's
// function operator
template <typename F> int Eat (F &&f) { return f (1); }
struct Foo {
int x = 1;
int Share () { return x++; }
int Frob (int);
};
int Foo::Frob (int r)
{
auto lam = [&](auto) { return Share (); };
r += Eat (lam);
auto lam0 = [&](auto) {
auto lam1 = [&](auto) { return Share (); };
return Eat (lam1); };
r += Eat (lam0);
return r;
}
int Frob (int r)
{
auto lam = [&](auto) { return 1; };
r += Eat (lam);
return r;
}
int main ()
{
Foo f;
return Frob (f.Frob (0)) == 4 ? 0 : 1;
}