// 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); | |
} |