https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116178
--- Comment #5 from antto <antto at mail dot bg> --- well, it's surely a blury subject, maybe some logic could be made up to make it make some amount of sense - afaiu currently the latest stable is 17(?) - the year is 2024 - yet on the language side of things, c++26 is being "brewed" and gcc already has some bits from there so maybe some kind of a rule could be made, for example: "if stable (the default -std) has gotten "old", and the current date has advanced several C++ versions forward, then: unstable would be the one that is not newer than the date" ...which for today could mean -std=c++unstable == -std=c++23 and experimental could just be the very very newest even if it merely has a temporary name (like "c++2b") the exact rule (if such is made) doesn't even have to be followed strictly, at the end of the day, the developers who know both the language and the state of the gcc implementation/support, could just hand-tune those aliases and users should not get angry if suddenly the alias changed. this is just IMO a handy alias/nickname for an actual language version, and i don't think anyone should use it for very serious things, after all it is going to be a moving target, it would depend on the gcc version, it's just a lazy way to say "give me something new and dangerous" disclaimer: i'm not too familiar with the actual state of the language standard either, i see now in Jakub's comment that despite being 2024, the C++23 standard is "not yet published" ... so maybe unstable==20 then, doesn't matter what i think, the developers can decide, i'd be happy if "unstable" gives something newer than the default, and "experimental" the absolute "everything new, including explosions", it won't be a problem if at some point unstable is equal to the experimental