// PR c++/86875
// { dg-do compile { target c++14 } }
template <typename _Tp> using decay_t = _Tp;
template <class Fun> class A {
  Fun fun_;
public:
  template <class T> A(T p1) : fun_(p1) {}
  auto operator()() { fun_(this); }
};
template <class Fun> auto y_combinator(Fun p1) { return A<decay_t<Fun>>(p1); }
int
main()
{
  const unsigned int w = 1;
  auto foo = y_combinator([=](auto) { auto i = +w; });
  foo();
}