In [lex.string], the length of the array type of a string literal determined from the number of encoded code units "as described below"; however, the further description only describes encoding for string literal objects, and string literal objects are only mentioned in relation to evaluating a string-literal.
A string may appear within unevaluated operands in such a way that its type needs to be known, for example:
char s[sizeof("Hello, world!")];
As per [expr.context], "[an] unevaluated operand is not evaluated".
Perhaps, "where n is the number of encoded code units as described below in the result of an evaluation of the string-literal were it to be evaluated" would work?
In [lex.string], the length of the array type of a string literal determined from the number of encoded code units "as described below"; however, the further description only describes encoding for string literal objects, and string literal objects are only mentioned in relation to evaluating a string-literal.
A string may appear within unevaluated operands in such a way that its type needs to be known, for example:
As per [expr.context], "[an] unevaluated operand is not evaluated".
Perhaps, "where n is the number of encoded code units
as described belowin the result of an evaluation of the string-literal were it to be evaluated" would work?