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 Chen void 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 Chen void 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 Chen void 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