// RUN: %clang_cc1 -std=c++20 -DEXPLICIT -verify %s
// RUN: %clang_cc1 -std=c++17 -DEXPLICIT -verify -Wno-c++20-extensions %s
// RUN: %clang_cc1 -std=c++14 -verify %s

// expected-no-diagnostics

#ifdef EXPLICIT

template <typename F>
void a(F &&f) {
  f.template operator()<0>();
}

template <typename F>
void b(F &&f) {
  a([=]<int i>() {
    f.template operator()<i>();
  });
}

void c() {
  b([&]<int i>() {
  });
}

#endif

template <typename F> void a1(F f) { f.operator()(0); }

template <typename F> void b1(F f) {
  a1([=](auto i) { f.operator()(i); });
}

void c1() {
  b1([&](auto i) {});
}

void c2() {
  const auto lambda = [&](auto arg1) {};
  [&](auto arg2) { lambda.operator()(arg2); }(0);
}
