Hello,

following two proposal got accepted for C++23:
static operator() P1169R4
static operator[] P2589R0
Thanks a lot to the authors and everyone involved!

I want to raise the idea of also allowing conversion functions to be static.

template<auto X>
struct ConvertsTo {
    static operator auto() { return X; }
};

I don't know, if code like this actually exists today and would benefit from my proposed change.

Lambdas:
Conversion functions which would benefit from being static, are the ones of stateless lambdas:

auto L = [](int a){ return a * a; };
int(*Fptr)(int) = L;

P1169R4#lambdas explains, that making the callable operator of a stateless lambda implicitly static, is an API and ABI break. Therefore, you have to explicitly request the callable operator to be static: [](int a) static { return a * a; };.
In such situations, we could make the conversion operator of a lambda static, too.

The proposed wording (in my opinion) would be, to remove the adjective "non-static" from https://eel.is/c++draft/class.conv.fct#2 and regarding the lambda the wording of https://eel.is/c++draft/expr.prim.lambda.closure#8 would need some small adjustment.

In 2001, Scott Meyers opened https://cplusplus.github.io/CWG/issues/296.html and asked about this exact topic. The resolution at this time has been to explicitly prohibit static conversion functions. What is our take on that today?

Kind regards,
Kilian