// PR c++/77337
// { dg-do compile { target c++14 } }
template<typename Functor>
struct fix_type {
  Functor functor;
  decltype(auto) operator()()
  { return functor(*this); }
};
template<typename Functor>
fix_type<Functor> fix(Functor functor)
{ return { functor }; }
int main()
{
  auto zero = fix
    ([](auto& self) -> int // N.B. non-deduced, non-dependent return type
     {
       return 0;
       self(); // { dg-bogus "use of \[^\n\r]* before deduction of 'auto'" }
     });
  return zero();
}