Annex E (informative) Conformance with UAX #31 [uaxid] (original) (raw)

E.2 R1 Default identifiers [uaxid.def]

E.2.1 General [uaxid.def.general]

UAX #31 specifies a default syntax for identifiers based on properties from the Unicode Character Database, UAX #44.

The general syntax is

:= * ( +)*

where <Start> has the XID_Start property,<Continue> has the XID_Continue property, and<Medial> is a list of characters permitted between continue characters.

For C++ we add the character U+005f low line, or _, to the set of permitted <Start> characters, the set is empty, and the characters are unmodified.

In the grammar used in UAX #31, this is

:= * := XID_Start + U+005f := + XID_Continue

E.2.2 R1a Restricted format characters [uaxid.def.rfmt]

If an implementation of UAX #31 wishes to allow format characters such as U+200d zero width joiner or U+200c zero width non-joinerit must define a profile allowing them, or describe precisely which combinations are permitted.

C++ does not allow format characters in identifiers, so this does not apply.

E.2.3 R1b Stable identifiers [uaxid.def.stable]

An implementation of UAX #31 may choose to guarantee that identifiers are stable across versions of the Unicode Standard.

Once a string qualifies as an identifier it does so in all future versions.

C++ does not make this guarantee, except to the extent that UAX #31 guarantees the stability of the XID_Start and XID_Continue properties.