Introduces support for `template for ( init; for-range-decl : expansion-init )`
which is a compile-time way to expand (iterate over):
- expansion expressions
- anything destructurable via structured bindings
- ranges with compile time size
It was sufficient to simply re-use the existing rule for
_for_range_loop_body for the part inside the parentheses, but add the
required sequence of `template` followed by `for`
Related to reflection, annotations use the same syntax as attributes,
but begin with an `=` and support any constant expression. Annotations
and Attributes can't be mixed within [[ ... ]].
This adds support for all the language changes introduced in P2996 which
was recently voted into the upcoming c++26 standard.
This includes:
- reflection expressions: the reflect operator (^^) followed by
expressions, type descriptors, or the global namespace (::)
- splice specifiers/expressions: [: expression :], which can appear as a
type, expression, alias descriptor, and more.
- consteval blocks: similar to static_asserts but have been introduced
specifically to allow constant evaluation side effects to occur at
specific places in code