Stabilisation Report
Summary
This PR will stabilise inline_const feature in expression position. inline_const_pat is still unstable and will not be stabilised.
The feature will allow code like this...
Because const FOO: () is an item, thus it is only lexically scoped (i.e. visible) inside require_zst, but does not inherit its generics (thus it cannot use T).
Maybe at some point I can append to it at compile time too. I'd love to be able to put a const {} and have allocations that resolve down to a 'static, and this seems to be a step toward that.
I guess I'm just excited that Vec::new() is the example they picked, since the next obvious question is, "can I push?"
What I'm curious about - this function was already const, so for stuff like this, I'd think there's basically a 100% chance the compiler would optimize this too, just implicitly.
AFAIK this new feature is just for times when it isn't an optimization, but more your own domain invariants. E.g. assertions.
But I could be wrong. I wonder if this can be used for actual optimizations in some places that the compiler couldn't figure out by itself.
I'm not getting it. What's the point? It seems very much like a cpp-ism where you can put const in so many places.
const int n2 = 0; // const object
int const n3 = 0; // const object (same as n2)
// https://learn.microsoft.com/en-us/cpp/cpp/const-and-volatile-pointers?view=msvc-170
const char *cpch; // const variable cannot point to another pointer
char * const pchc; // value of pointer is constant
int f() const; // members cannot be modified in this, only read
std::string const f(); // returns a constant