brintos

brintos / llvm-project-archived public Read only

0
0
Text · 901 B · a5410d2 Raw
52 lines · cpp
1// RUN: %clang_cc1 -std=c++20 -DEXPLICIT -verify %s2// RUN: %clang_cc1 -std=c++17 -DEXPLICIT -verify -Wno-c++20-extensions %s3// RUN: %clang_cc1 -std=c++14 -verify %s4 5// expected-no-diagnostics6 7#ifdef EXPLICIT8 9template <typename F>10void a(F &&f) {11  f.template operator()<0>();12}13 14template <typename F>15void b(F &&f) {16  a([=]<int i>() {17    f.template operator()<i>();18  });19}20 21void c() {22  b([&]<int i>() {23  });24}25 26#endif27 28template <typename F> void a1(F f) { f.operator()(0); }29 30template <typename F> void b1(F f) {31  a1([=](auto i) { f.operator()(i); });32}33 34void c1() {35  b1([&](auto i) {});36}37 38void c2() {39  const auto lambda = [&](auto arg1) {};40  [&](auto arg2) { lambda.operator()(arg2); }(0);41}42 43auto d = [](auto) {};44 45template <typename T>46void d1(T x) { d.operator()(x); }47 48void d2() { d1(0); }49 50template <typename T> int e1 = [](auto){ return T(); }.operator()(T());51int e2 = e1<int>;52