(excuse my poor wording) You have already mentioned templates and macros,
but using these you can create your own DSL, so you can make new identifiers that will create a new block. But of course you can't add these to your list. The important thing is that `:` defines the start of a block (and hence a change in scope) (Is it really `if` `while` `block`, ...., or is it `:` that creates the scope change ?)
