1*61d1cce2SYuanfang Chen // RUN: %clang_cc1 -std=c++2a -fsyntax-only -emit-llvm-only %s 2*61d1cce2SYuanfang Chen // RUN: %clang_cc1 -std=c++2a -fsyntax-only -fdelayed-template-parsing %s 3*61d1cce2SYuanfang Chen // RUN: %clang_cc1 -std=c++2a -fsyntax-only -fms-extensions %s 4*61d1cce2SYuanfang Chen // RUN: %clang_cc1 -std=c++2a -fsyntax-only -fdelayed-template-parsing -fms-extensions %s 5*61d1cce2SYuanfang Chen 6*61d1cce2SYuanfang Chen namespace PR45881 { 7*61d1cce2SYuanfang Chen struct A { 8*61d1cce2SYuanfang Chen void f(); 9*61d1cce2SYuanfang Chen }; 10*61d1cce2SYuanfang Chen int id(A*); f()11*61d1cce2SYuanfang Chenvoid A::f() { 12*61d1cce2SYuanfang Chen auto z = [*this](auto z2, decltype(z2(this)) z3){}; 13*61d1cce2SYuanfang Chen z(id,3); 14*61d1cce2SYuanfang Chen } 15*61d1cce2SYuanfang Chen 16*61d1cce2SYuanfang Chen struct B { 17*61d1cce2SYuanfang Chen void f(); 18*61d1cce2SYuanfang Chen }; f()19*61d1cce2SYuanfang Chenvoid B::f() { 20*61d1cce2SYuanfang Chen auto z = []<typename TT, typename TTT=decltype(TT()(this))>(){return 0;}; 21*61d1cce2SYuanfang Chen z.template operator()<int(*)(B*)>(); 22*61d1cce2SYuanfang Chen } 23*61d1cce2SYuanfang Chen 24*61d1cce2SYuanfang Chen struct C { 25*61d1cce2SYuanfang Chen void f(); 26*61d1cce2SYuanfang Chen }; f()27*61d1cce2SYuanfang Chenvoid C::f() { 28*61d1cce2SYuanfang Chen auto z = []<typename TT, decltype(TT()(this)) n>(){return 0;}; 29*61d1cce2SYuanfang Chen z.template operator()<int(*)(C*), 8>(); 30*61d1cce2SYuanfang Chen } 31*61d1cce2SYuanfang Chen } // namespace PR45881 32