C++ Logo

sg16

Advanced search

[SG16] Comments on P2361R3 Unevaluated strings

From: Jens Maurer <Jens.Maurer_at_[hidden]>
Date: Wed, 3 Nov 2021 19:29:04 +0100
Just a few random things I ran across.


translation set -> translation character set
(appears more than once)


The wording doesn't work, because it ignores lex.phases p1.7:

"Each preprocessing token is converted into a token (5.6)."

The "token" grammar non-terminal cannot represent
an "unevaluated-string", because the latter is not a literal.

Also, as shown in the prose part, we don't know until phase 7
whether the context needs an object-producing string-literal
or an unevaluated-string. Thus, unevaluated-string is not
a phase 3-6 concept, but a phase 7 concept, and thus should
not appear in [lex].

Note that phases 1-6 do not convert string-literals to
objects and thus don't interpret escape sequences just yet,
so it seems safe to assume this is postponed to phase 7.

Suggestion:

 - Introduce unevaluated-string in [dcl.pre]

"An unevaluated-string is never evaluated and its interpretation
depends on the context in which it appears."

->

"An unevaluated-string is never evaluated.
[ Note: Thus, a string literal object is never created for an
unevaluated-string ([lex.string]). ]"

And add a note with cross-references to all places where
unevaluated-string appears.

Jens

Received on 2021-11-03 13:29:09