But I believe for this type of problem it can be clarifying to begin by identifying a handful of things you should be able to do, and then baking those in. This helps because now competing proposals for how to do compile time reflection have an example application. How does your proposal make the agreed enum-to-string syntax work ? It must do that or it's not a proposal to solve the problem we agreed we have. And meanwhile the ordinary programmers get the things everybody agrees they should be able to do because we're just arguing about how those things work, not whether they should be possible.
Without this constraint, such proposals tend to wander off, each showing how they're ideally suited for solving a problem they came up with, in a context they chose, using methods they prefer, and so illuminating nothing.
A Try operator, perhaps written ?? has been proposed for C++ 26. Even if it's agreed that C++ wants this feature, you can expect years of arguing about exactly how it should work. Rust got its own Try operator ? many years ago. But the conceptual underpinning for this operator (now as the core::ops::Try trait), is still unstable and has actually been re-designed twice in that time. Ordinary Rust programmers don't need to care, they got a working operator, and they'll continue to have a working operator, only the people who care deeply about this need to spend time discussing the finer details of how that operator should be implemented.