2022-09-19 Jakub Jelinek * lambda.cc (maybe_add_lambda_conv_op): If !thisarg, for decltype_call use callop rather than objfn in prepare_op_call. * g++.dg/cpp23/static-operator-call3.C: New test. --- gcc/cp/lambda.cc.jj 2022-09-19 12:34:46.638522537 +0200 +++ gcc/cp/lambda.cc 2022-09-19 14:19:31.200378854 +0200 @@ -1122,6 +1122,8 @@ maybe_add_lambda_conv_op (tree type) --nargs; call = prepare_op_call (objfn, nargs); } + else + objfn = callop; if (type_uses_auto (fn_result)) decltype_call = prepare_op_call (objfn, nargs); --- gcc/testsuite/g++.dg/cpp23/static-operator-call3.C.jj 2022-09-19 13:30:27.850765150 +0200 +++ gcc/testsuite/g++.dg/cpp23/static-operator-call3.C 2022-09-19 13:33:04.178620907 +0200 @@ -0,0 +1,10 @@ +// P1169R4 - static operator() +// { dg-do compile { target c++14 } } +// { dg-options "" } + +void +foo () +{ + auto a = [] (auto x) static { return x; }; // { dg-warning "'static' only valid in lambda with" "" { target c++20_down } } + int (*b) (int) = a; +}