Question about non numeric versioning discussion

Hello, I wanted to ask a bit about the state of discussion #23649 (can’t link due to new user limitation). I saw that the proposed options are currently either modifying the if expression to allow for additional parameters:

if(<string|variable> VERSION_MATCHES <string|variable> [<version_scheme>])

Or a bunch of verbose overloads for all current operations:

if(<string|expression> <VERSION_SCHEME>_MATCHES <string|expression>)

To not enter that discussion on the GitLab, as I don’t want to clutter it up with questions. I ask here.

Why is the operator1,2-syntax used for scoped variables (i.e. CACHE{} and ENV{}), not used more broadly in CMake?

I suppose that these operators act like read only scopes. Not actually persistent metadata/type information. So perhaps using it like VERSION_MATCHES $SCHEME{"x.y.z-pre"} would be very different from the current behaviour. Would something like $SCHEME:{VERSION_MATCHES} also not work?

Having some concept of generics/templates would be the only way to solve this in a way that doesn’t make CMake harder to maintain, nor introduces new types that make implementing CMake harder/less stable?