[lex.literal]
# 5 Lexical conventions [[lex]](./#lex)
## 5.13 Literals [lex.literal]
### [5.13.1](#kinds) Kinds of literals [[lex.literal.kinds]](lex.literal.kinds)
[1](#kinds-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1146)
There are several kinds of literals[.](#kinds-1.sentence-1)[14](#footnote-14 "The term âliteralâ generally designates, in this document, those tokens that are called âconstantsâ in C.")
[literal:](#nt:literal "5.13.1 Kinds of literals [lex.literal.kinds]")
[*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")
[*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")
[*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")
[*boolean-literal*](#nt:boolean-literal "5.13.7 Boolean literals [lex.bool]")
[*pointer-literal*](#nt:pointer-literal "5.13.8 Pointer literals [lex.nullptr]")
[*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]")
[*Note [1](#kinds-note-1)*:
When appearing as an [*expression*](expr.comma#nt:expression "7.6.20 Comma operator [expr.comma]"),
a literal has a type and a value category ([[expr.prim.literal]](expr.prim.literal "7.5.2 Literals"))[.](#kinds-1.sentence-2)
â *end note*]
[14)](#footnote-14)[14)](#footnoteref-14)
The term âliteralâ generally designates, in this
document, those tokens that are called âconstantsâ in C[.](#footnote-14.sentence-1)
### [5.13.2](#lex.icon) Integer literals [[lex.icon]](lex.icon)
[integer-literal:](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")
[*binary-literal*](#nt:binary-literal "5.13.2 Integer literals [lex.icon]") [*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")opt
[*octal-literal*](#nt:octal-literal "5.13.2 Integer literals [lex.icon]") [*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")opt
[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]") [*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")opt
[*hexadecimal-literal*](#nt:hexadecimal-literal "5.13.2 Integer literals [lex.icon]") [*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")opt
[binary-literal:](#nt:binary-literal "5.13.2 Integer literals [lex.icon]")
0b [*binary-digit*](#nt:binary-digit "5.13.2 Integer literals [lex.icon]")
0B [*binary-digit*](#nt:binary-digit "5.13.2 Integer literals [lex.icon]")
[*binary-literal*](#nt:binary-literal "5.13.2 Integer literals [lex.icon]") 'opt [*binary-digit*](#nt:binary-digit "5.13.2 Integer literals [lex.icon]")
[octal-literal:](#nt:octal-literal "5.13.2 Integer literals [lex.icon]")
0
[*octal-literal*](#nt:octal-literal "5.13.2 Integer literals [lex.icon]") 'opt [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")
[decimal-literal:](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]")
[*nonzero-digit*](#nt:nonzero-digit "5.13.2 Integer literals [lex.icon]")
[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]") 'opt [*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")
[hexadecimal-literal:](#nt:hexadecimal-literal "5.13.2 Integer literals [lex.icon]")
[*hexadecimal-prefix*](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") [*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]")
[binary-digit:](#nt:binary-digit "5.13.2 Integer literals [lex.icon]") one of
0 1
[octal-digit:](#nt:octal-digit "5.13.2 Integer literals [lex.icon]") one of
0 1 2 3 4 5 6 7
[nonzero-digit:](#nt:nonzero-digit "5.13.2 Integer literals [lex.icon]") one of
1 2 3 4 5 6 7 8 9
[hexadecimal-prefix:](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") one of
0x 0X
[hexadecimal-digit-sequence:](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]")
[*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")
[*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]") 'opt [*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")
[hexadecimal-digit:](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]") one of
0 1 2 3 4 5 6 7 8 9
a b c d e f
A B C D E F
[integer-suffix:](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")
[*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]") [*long-suffix*](#nt:long-suffix "5.13.2 Integer literals [lex.icon]")opt
[*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]") [*long-long-suffix*](#nt:long-long-suffix "5.13.2 Integer literals [lex.icon]")opt
[*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]") [*size-suffix*](#nt:size-suffix "5.13.2 Integer literals [lex.icon]")opt
[*long-suffix*](#nt:long-suffix "5.13.2 Integer literals [lex.icon]") [*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]")opt
[*long-long-suffix*](#nt:long-long-suffix "5.13.2 Integer literals [lex.icon]") [*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]")opt
[*size-suffix*](#nt:size-suffix "5.13.2 Integer literals [lex.icon]") [*unsigned-suffix*](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]")opt
[unsigned-suffix:](#nt:unsigned-suffix "5.13.2 Integer literals [lex.icon]") one of
u U
[long-suffix:](#nt:long-suffix "5.13.2 Integer literals [lex.icon]") one of
l L
[long-long-suffix:](#nt:long-long-suffix "5.13.2 Integer literals [lex.icon]") one of
ll LL
[size-suffix:](#nt:size-suffix "5.13.2 Integer literals [lex.icon]") one of
z Z
[1](#lex.icon-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1268)
In an [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]"),
the sequence of[*binary-digit*](#nt:binary-digit "5.13.2 Integer literals [lex.icon]")*s*,[*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")*s*,[*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")*s*, or[*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")*s* is interpreted as a base N integer as shown in Table [7](#tab:lex.icon.base "Table 7: Base of integer-literals");
the lexically first digit of the sequence of digits is the most significant[.](#lex.icon-1.sentence-1)
[*Note [1](#lex.icon-note-1)*:
The prefix and any optional separating single quotes are ignored
when determining the value[.](#lex.icon-1.sentence-2)
â *end note*]
Table [7](#tab:lex.icon.base) — Base of [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")*s* [[tab:lex.icon.base]](./tab:lex.icon.base)
| [ð](#tab:lex.icon.base-row-1)
**Kind of [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")** | **base N** |
| --- | --- |
| [ð](#tab:lex.icon.base-row-2)
[*binary-literal*](#nt:binary-literal "5.13.2 Integer literals [lex.icon]") | 2 |
| [ð](#tab:lex.icon.base-row-3)
[*octal-literal*](#nt:octal-literal "5.13.2 Integer literals [lex.icon]") | 8 |
| [ð](#tab:lex.icon.base-row-4)
[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]") | 10 |
| [ð](#tab:lex.icon.base-row-5)
[*hexadecimal-literal*](#nt:hexadecimal-literal "5.13.2 Integer literals [lex.icon]") | 16 |
[2](#lex.icon-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1297)
The [*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")*s*a through f and A through F have decimal values ten through fifteen[.](#lex.icon-2.sentence-1)
[*Example [1](#lex.icon-example-1)*:
The number twelve can be written 12, 014,0XC, or 0b1100[.](#lex.icon-2.sentence-2)
The [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")*s* 1048576,1'048'576, 0X100000, 0x10'0000, and0'004'000'000 all have the same value[.](#lex.icon-2.sentence-3)
â *end example*]
[3](#lex.icon-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1308)
The type of an [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") is
the first type in the list in Table [8](#tab:lex.icon.type "Table 8: Types of integer-literals") corresponding to its optional [*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]") in which its value can be represented[.](#lex.icon-3.sentence-1)
Table [8](#tab:lex.icon.type) — Types of [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")*s* [[tab:lex.icon.type]](./tab:lex.icon.type)
| [ð](#tab:lex.icon.type-row-1)
**[*integer-suffix*](#nt:integer-suffix "5.13.2 Integer literals [lex.icon]")** | **[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]")** | **[*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") other than [*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]")** |
| --- | --- | --- |
| [ð](#tab:lex.icon.type-row-2)
none | int | int |
| [ð](#tab:lex.icon.type-row-3) | long int | unsigned int |
| [ð](#tab:lex.icon.type-row-4) | long long int | long int |
| [ð](#tab:lex.icon.type-row-5) | | unsigned long int |
| [ð](#tab:lex.icon.type-row-6) | | long long int |
| [ð](#tab:lex.icon.type-row-7) | | unsigned long long int |
| [ð](#tab:lex.icon.type-row-8)
u or U | unsigned int | unsigned int |
| [ð](#tab:lex.icon.type-row-9) | unsigned long int | unsigned long int |
| [ð](#tab:lex.icon.type-row-10) | unsigned long long int | unsigned long long int |
| [ð](#tab:lex.icon.type-row-11)
l or L | long int | long int |
| [ð](#tab:lex.icon.type-row-12) | long long int | unsigned long int |
| [ð](#tab:lex.icon.type-row-13) | | long long int |
| [ð](#tab:lex.icon.type-row-14) | | unsigned long long int |
| [ð](#tab:lex.icon.type-row-15)
Both u or U | unsigned long int | unsigned long int |
| [ð](#tab:lex.icon.type-row-16)
and l or L | unsigned long long int | unsigned long long int |
| [ð](#tab:lex.icon.type-row-17)
ll or LL | long long int | long long int |
| [ð](#tab:lex.icon.type-row-18) | | unsigned long long int |
| [ð](#tab:lex.icon.type-row-19)
Both u or U | unsigned long long int | unsigned long long int |
| [ð](#tab:lex.icon.type-row-20)
and ll or LL | | |
| [ð](#tab:lex.icon.type-row-21)
z or Z | the signed integer type corresponding | the signed integer type |
| [ð](#tab:lex.icon.type-row-22) | to std::size_t ([[support.types.layout]](support.types.layout "17.2.4 Sizes, alignments, and offsets")) | corresponding to std::size_t |
| [ð](#tab:lex.icon.type-row-23) | | std::size_t |
| [ð](#tab:lex.icon.type-row-24)
Both u or U | std::size_t | std::size_t |
| [ð](#tab:lex.icon.type-row-25)
and z or Z | | |
[4](#lex.icon-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1399)
Except for [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")*s* containing
a [*size-suffix*](#nt:size-suffix "5.13.2 Integer literals [lex.icon]"),
if the value of an [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") cannot be represented by any type in its list and
an extended integer type ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types")) can represent its value,
it may have that extended integer type[.](#lex.icon-4.sentence-1)
If all of the types in the list for the [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") are signed,
the extended integer type is signed[.](#lex.icon-4.sentence-2)
If all of the types in the list for the [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") are unsigned,
the extended integer type is unsigned[.](#lex.icon-4.sentence-3)
If the list contains both signed and unsigned types,
the extended integer type may be signed or unsigned[.](#lex.icon-4.sentence-4)
If an [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") cannot be represented by any of the allowed types,
the program is ill-formed[.](#lex.icon-4.sentence-5)
[*Note [2](#lex.icon-note-2)*:
An [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]") with a z or Z suffix
is ill-formed if it cannot be represented by std::size_t[.](#lex.icon-4.sentence-6)
â *end note*]
### [5.13.3](#lex.ccon) Character literals [[lex.ccon]](lex.ccon)
[character-literal:](#nt:character-literal "5.13.3 Character literals [lex.ccon]")
[*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")opt ' [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") '
[encoding-prefix:](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") one of
u8 u U L
[c-char-sequence:](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]")
[*c-char*](#nt:c-char "5.13.3 Character literals [lex.ccon]") [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]")opt
[c-char:](#nt:c-char "5.13.3 Character literals [lex.ccon]")
[*basic-c-char*](#nt:basic-c-char "5.13.3 Character literals [lex.ccon]")
[*escape-sequence*](#nt:escape-sequence "5.13.3 Character literals [lex.ccon]")
[*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]")
[basic-c-char:](#nt:basic-c-char "5.13.3 Character literals [lex.ccon]")
any member of the translation character set except the U+0027 apostrophe,
U+005c reverse solidus, or new-line character
[escape-sequence:](#nt:escape-sequence "5.13.3 Character literals [lex.ccon]")
[*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]")
[*numeric-escape-sequence*](#nt:numeric-escape-sequence "5.13.3 Character literals [lex.ccon]")
[*conditional-escape-sequence*](#nt:conditional-escape-sequence "5.13.3 Character literals [lex.ccon]")
[simple-escape-sequence:](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]")
\ [*simple-escape-sequence-char*](#nt:simple-escape-sequence-char "5.13.3 Character literals [lex.ccon]")
[simple-escape-sequence-char:](#nt:simple-escape-sequence-char "5.13.3 Character literals [lex.ccon]") one of
' " ? \ a b f n r t v
[numeric-escape-sequence:](#nt:numeric-escape-sequence "5.13.3 Character literals [lex.ccon]")
[*octal-escape-sequence*](#nt:octal-escape-sequence "5.13.3 Character literals [lex.ccon]")
[*hexadecimal-escape-sequence*](#nt:hexadecimal-escape-sequence "5.13.3 Character literals [lex.ccon]")
[simple-octal-digit-sequence:](#nt:simple-octal-digit-sequence "5.13.3 Character literals [lex.ccon]")
[*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]") [*simple-octal-digit-sequence*](#nt:simple-octal-digit-sequence "5.13.3 Character literals [lex.ccon]")opt
[octal-escape-sequence:](#nt:octal-escape-sequence "5.13.3 Character literals [lex.ccon]")
\ [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")
\ [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]") [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")
\ [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]") [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]") [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")
\o{ [*simple-octal-digit-sequence*](#nt:simple-octal-digit-sequence "5.13.3 Character literals [lex.ccon]") }
[hexadecimal-escape-sequence:](#nt:hexadecimal-escape-sequence "5.13.3 Character literals [lex.ccon]")
\x [*simple-hexadecimal-digit-sequence*](lex.universal.char#nt:simple-hexadecimal-digit-sequence "5.3.2 Universal character names [lex.universal.char]")
\x{ [*simple-hexadecimal-digit-sequence*](lex.universal.char#nt:simple-hexadecimal-digit-sequence "5.3.2 Universal character names [lex.universal.char]") }
[conditional-escape-sequence:](#nt:conditional-escape-sequence "5.13.3 Character literals [lex.ccon]")
\ [*conditional-escape-sequence-char*](#nt:conditional-escape-sequence-char "5.13.3 Character literals [lex.ccon]")
[conditional-escape-sequence-char:](#nt:conditional-escape-sequence-char "5.13.3 Character literals [lex.ccon]")
any member of the basic character set that is not an [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]"), a [*simple-escape-sequence-char*](#nt:simple-escape-sequence-char "5.13.3 Character literals [lex.ccon]"), or the characters N, o, u, U, or x
[1](#lex.ccon-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1505)
A [*multicharacter literal*](#def:literal,multicharacter "5.13.3 Character literals [lex.ccon]") is a [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") whose [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") consists of
more than one [*c-char*](#nt:c-char "5.13.3 Character literals [lex.ccon]")[.](#lex.ccon-1.sentence-1)
A multicharacter literal shall not have an [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")[.](#lex.ccon-1.sentence-2)
If a multicharacter literal contains a [*c-char*](#nt:c-char "5.13.3 Character literals [lex.ccon]") that is not encodable as a single code unit in the ordinary literal encoding,
the program is ill-formed[.](#lex.ccon-1.sentence-3)
Multicharacter literals are conditionally-supported[.](#lex.ccon-1.sentence-4)
[2](#lex.ccon-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1525)
The kind of a [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]"),
its type, and its associated character encoding ([[lex.charset]](lex.charset "5.3.1 Character sets"))
are determined by
its [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") and its [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") as defined by Table [9](#tab:lex.ccon.literal "Table 9: Character literals")[.](#lex.ccon-2.sentence-1)
Table [9](#tab:lex.ccon.literal) — Character literals [[tab:lex.ccon.literal]](./tab:lex.ccon.literal)
| [ð](#tab:lex.ccon.literal-row-1)
**Encoding** | **Kind** | **Type** | **Associated char-** | **Example** |
| --- | --- | --- | --- | --- |
| [ð](#tab:lex.ccon.literal-row-2)
**prefix** | | | **acter encoding** | |
| [ð](#tab:lex.ccon.literal-row-3)
none | [*ordinary character literal*](#def:literal,character,ordinary "5.13.3 Character literals [lex.ccon]") | char | ordinary literal | 'v' |
| [ð](#tab:lex.ccon.literal-row-4)
| multicharacter literal | int | encoding | 'abcd' |
| [ð](#tab:lex.ccon.literal-row-5)
L | [*wide character literal*](#def:literal,character,wide "5.13.3 Character literals [lex.ccon]") | wchar_t | wide literal | L'w' |
| [ð](#tab:lex.ccon.literal-row-6) | | | encoding | |
| [ð](#tab:lex.ccon.literal-row-7)
u8 | [*UTF-8 character literal*](#def:literal,character,UTF-8 "5.13.3 Character literals [lex.ccon]") | char8_t | UTF-8 | u8'x' |
| [ð](#tab:lex.ccon.literal-row-8)
u | [*UTF-16 character literal*](#def:literal,character,UTF-16 "5.13.3 Character literals [lex.ccon]") | char16_t | UTF-16 | u'y' |
| [ð](#tab:lex.ccon.literal-row-9)
U | [*UTF-32 character literal*](#def:literal,character,UTF-32 "5.13.3 Character literals [lex.ccon]") | char32_t | UTF-32 | U'z' |
[3](#lex.ccon-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1571)
In translation phase 4,
the value of a [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") is determined
using the range of representable values
of the [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")'s type in translation phase 7[.](#lex.ccon-3.sentence-1)
A multicharacter literal has animplementation-defined
value[.](#lex.ccon-3.sentence-2)
The value of any other kind of [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") is determined as follows:
- [(3.1)](#lex.ccon-3.1)
A [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") with
a [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") consisting of a single[*basic-c-char*](#nt:basic-c-char "5.13.3 Character literals [lex.ccon]"),[*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]"), or[*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]") is the code unit value of the specified character
as encoded in the literal's associated character encoding[.](#lex.ccon-3.1.sentence-1)
If the specified character lacks
representation in the literal's associated character encoding or
if it cannot be encoded as a single code unit,
then the program is ill-formed[.](#lex.ccon-3.1.sentence-2)
- [(3.2)](#lex.ccon-3.2)
A [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") with
a [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") consisting of
a single [*numeric-escape-sequence*](#nt:numeric-escape-sequence "5.13.3 Character literals [lex.ccon]") has a value as follows:
* [(3.2.1)](#lex.ccon-3.2.1)
Let v be the integer value represented by
the octal number comprising
the sequence of [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")*s* in
an [*octal-escape-sequence*](#nt:octal-escape-sequence "5.13.3 Character literals [lex.ccon]") or by
the hexadecimal number comprising
the sequence of [*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")*s* in
a [*hexadecimal-escape-sequence*](#nt:hexadecimal-escape-sequence "5.13.3 Character literals [lex.ccon]")[.](#lex.ccon-3.2.1.sentence-1)
* [(3.2.2)](#lex.ccon-3.2.2)
If v does not exceed
the range of representable values of the [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")'s type,
then the value is v[.](#lex.ccon-3.2.2.sentence-1)
* [(3.2.3)](#lex.ccon-3.2.3)
Otherwise,
if the [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")'s [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") is absent or L, andv does not exceed the range of representable values of the corresponding unsigned type for the underlying type of the [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")'s type,
then the value is the unique value of the [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]")'s type T that is congruent to v modulo 2N, where N is the width of T[.](#lex.ccon-3.2.3.sentence-1)
* [(3.2.4)](#lex.ccon-3.2.4)
Otherwise, the program is ill-formed[.](#lex.ccon-3.2.4.sentence-1)
- [(3.3)](#lex.ccon-3.3)
A [*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") with
a [*c-char-sequence*](#nt:c-char-sequence "5.13.3 Character literals [lex.ccon]") consisting of
a single [*conditional-escape-sequence*](#nt:conditional-escape-sequence "5.13.3 Character literals [lex.ccon]") is conditionally-supported and
has an implementation-defined value[.](#lex.ccon-3.3.sentence-1)
[4](#lex.ccon-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1629)
The character specified by a [*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]") is specified in Table [10](#tab:lex.ccon.esc "Table 10: Simple escape sequences")[.](#lex.ccon-4.sentence-1)
[*Note [1](#lex.ccon-note-1)*:
Using an escape sequence for a question mark
is supported for compatibility with C++ 2014 and C[.](#lex.ccon-4.sentence-2)
â *end note*]
Table [10](#tab:lex.ccon.esc) — Simple escape sequences [[tab:lex.ccon.esc]](./tab:lex.ccon.esc)
| [ð](#tab:lex.ccon.esc-row-1)
**character** | | **[*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]")** |
| --- | --- | --- |
| [ð](#tab:lex.ccon.esc-row-2)
U+000a | line feed | \n |
| [ð](#tab:lex.ccon.esc-row-3)
U+0009 | character tabulation | \t |
| [ð](#tab:lex.ccon.esc-row-4)
U+000b | line tabulation | \v |
| [ð](#tab:lex.ccon.esc-row-5)
U+0008 | backspace | \b |
| [ð](#tab:lex.ccon.esc-row-6)
U+000d | carriage return | \r |
| [ð](#tab:lex.ccon.esc-row-7)
U+000c | form feed | \f |
| [ð](#tab:lex.ccon.esc-row-8)
U+0007 | alert | \a |
| [ð](#tab:lex.ccon.esc-row-9)
U+005c | reverse solidus | \\ |
| [ð](#tab:lex.ccon.esc-row-10)
U+003f | question mark | \? |
| [ð](#tab:lex.ccon.esc-row-11)
U+0027 | apostrophe | \' |
| [ð](#tab:lex.ccon.esc-row-12)
U+0022 | quotation mark | \" |
### [5.13.4](#lex.fcon) Floating-point literals [[lex.fcon]](lex.fcon)
[floating-point-literal:](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[*decimal-floating-point-literal*](#nt:decimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[*hexadecimal-floating-point-literal*](#nt:hexadecimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[decimal-floating-point-literal:](#nt:decimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[*fractional-constant*](#nt:fractional-constant "5.13.4 Floating-point literals [lex.fcon]") [*exponent-part*](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]")opt [*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")opt
[*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") [*exponent-part*](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")opt
[hexadecimal-floating-point-literal:](#nt:hexadecimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")
[*hexadecimal-prefix*](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") [*hexadecimal-fractional-constant*](#nt:hexadecimal-fractional-constant "5.13.4 Floating-point literals [lex.fcon]") [*binary-exponent-part*](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")opt
[*hexadecimal-prefix*](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") [*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]") [*binary-exponent-part*](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")opt
[fractional-constant:](#nt:fractional-constant "5.13.4 Floating-point literals [lex.fcon]")
[*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")opt . [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
[*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") .
[hexadecimal-fractional-constant:](#nt:hexadecimal-fractional-constant "5.13.4 Floating-point literals [lex.fcon]")
[*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]")opt . [*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]")
[*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]") .
[exponent-part:](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]")
e [*sign*](#nt:sign "5.13.4 Floating-point literals [lex.fcon]")opt [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
E [*sign*](#nt:sign "5.13.4 Floating-point literals [lex.fcon]")opt [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
[binary-exponent-part:](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]")
p [*sign*](#nt:sign "5.13.4 Floating-point literals [lex.fcon]")opt [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
P [*sign*](#nt:sign "5.13.4 Floating-point literals [lex.fcon]")opt [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
[sign:](#nt:sign "5.13.4 Floating-point literals [lex.fcon]") one of
+ -
[digit-sequence:](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]")
[*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")
[*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") 'opt [*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")
[floating-point-suffix:](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]") one of
f l f16 f32 f64 f128 bf16 F L F16 F32 F64 F128 BF16
[1](#lex.fcon-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1718)
The type of
a [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") ([[basic.fundamental]](basic.fundamental "6.9.2 Fundamental types"), [[basic.extended.fp]](basic.extended.fp "6.9.3 Optional extended floating-point types"))
is determined by
its [*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]") as specified in Table [11](#tab:lex.fcon.type "Table 11: Types of floating-point-literals")[.](#lex.fcon-1.sentence-1)
[*Note [1](#lex.fcon-note-1)*:
The floating-point suffixesf16, f32, f64, f128, bf16,F16, F32, F64, F128, and BF16 are conditionally-supported[.](#lex.fcon-1.sentence-2)
See [[basic.extended.fp]](basic.extended.fp "6.9.3 Optional extended floating-point types")[.](#lex.fcon-1.sentence-3)
â *end note*]
Table [11](#tab:lex.fcon.type) — Types of [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")*s* [[tab:lex.fcon.type]](./tab:lex.fcon.type)
| [ð](#tab:lex.fcon.type-row-1)
**[*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")** | **type** |
| --- | --- |
| [ð](#tab:lex.fcon.type-row-2)
none | double |
| [ð](#tab:lex.fcon.type-row-3)
f or F | float |
| [ð](#tab:lex.fcon.type-row-4)
l or L | long double |
| [ð](#tab:lex.fcon.type-row-5)
f16 or F16 | std::float16_t |
| [ð](#tab:lex.fcon.type-row-6)
f32 or F32 | std::float32_t |
| [ð](#tab:lex.fcon.type-row-7)
f64 or F64 | std::float64_t |
| [ð](#tab:lex.fcon.type-row-8)
f128 or F128 | std::float128_t |
| [ð](#tab:lex.fcon.type-row-9)
bf16 or BF16 | std::bfloat16_t |
[2](#lex.fcon-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1752)
The [*significand*](#def:significand "5.13.4 Floating-point literals [lex.fcon]") of a [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") is the [*fractional-constant*](#nt:fractional-constant "5.13.4 Floating-point literals [lex.fcon]") or [*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") of a [*decimal-floating-point-literal*](#nt:decimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") or the [*hexadecimal-fractional-constant*](#nt:hexadecimal-fractional-constant "5.13.4 Floating-point literals [lex.fcon]") or [*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]") of a [*hexadecimal-floating-point-literal*](#nt:hexadecimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")[.](#lex.fcon-2.sentence-1)
In the significand,
the sequence of [*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")*s* or [*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")*s* and optional period are interpreted as a base N real number s,
where N is 10 for a [*decimal-floating-point-literal*](#nt:decimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") and
16 for a [*hexadecimal-floating-point-literal*](#nt:hexadecimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")[.](#lex.fcon-2.sentence-2)
[*Note [2](#lex.fcon-note-2)*:
Any optional separating single quotes are ignored when determining the value[.](#lex.fcon-2.sentence-3)
â *end note*]
If an [*exponent-part*](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]") or [*binary-exponent-part*](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]") is present,
the exponent e of the [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") is the result of interpreting
the sequence of an optional [*sign*](#nt:sign "5.13.4 Floating-point literals [lex.fcon]") and the [*digit*](lex.name#nt:digit "5.11 Identifiers [lex.name]")*s* as a base 10 integer[.](#lex.fcon-2.sentence-4)
Otherwise, the exponent e is 0[.](#lex.fcon-2.sentence-5)
The scaled value of the literal issÃ10e for a [*decimal-floating-point-literal*](#nt:decimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") andsÃ2e for a [*hexadecimal-floating-point-literal*](#nt:hexadecimal-floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")[.](#lex.fcon-2.sentence-6)
[*Example [1](#lex.fcon-example-1)*:
The [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")*s*49.625 and 0xC.68p+2 have the same value[.](#lex.fcon-2.sentence-7)
The [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]")*s*1.602'176'565e-19 and 1.602176565e-19 have the same value[.](#lex.fcon-2.sentence-8)
â *end example*]
[3](#lex.fcon-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1786)
If the scaled value is not in the range of representable
values for its type, the program is ill-formed[.](#lex.fcon-3.sentence-1)
Otherwise, the value of a [*floating-point-literal*](#nt:floating-point-literal "5.13.4 Floating-point literals [lex.fcon]") is the scaled value if representable,
else the larger or smaller representable value nearest the scaled value,
chosen in an implementation-defined manner[.](#lex.fcon-3.sentence-2)
### [5.13.5](#lex.string) String literals [[lex.string]](lex.string)
[string-literal:](#nt:string-literal "5.13.5 String literals [lex.string]")
[*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")opt " [*s-char-sequence*](#nt:s-char-sequence "5.13.5 String literals [lex.string]")opt "
[*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")opt R [*raw-string*](#nt:raw-string "5.13.5 String literals [lex.string]")
[s-char-sequence:](#nt:s-char-sequence "5.13.5 String literals [lex.string]")
[*s-char*](#nt:s-char "5.13.5 String literals [lex.string]") [*s-char-sequence*](#nt:s-char-sequence "5.13.5 String literals [lex.string]")opt
[s-char:](#nt:s-char "5.13.5 String literals [lex.string]")
[*basic-s-char*](#nt:basic-s-char "5.13.5 String literals [lex.string]")
[*escape-sequence*](#nt:escape-sequence "5.13.3 Character literals [lex.ccon]")
[*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]")
[basic-s-char:](#nt:basic-s-char "5.13.5 String literals [lex.string]")
any member of the translation character set except the U+0022 quotation mark,
U+005c reverse solidus, or new-line character
[raw-string:](#nt:raw-string "5.13.5 String literals [lex.string]")
" [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]")opt ( [*r-char-sequence*](#nt:r-char-sequence "5.13.5 String literals [lex.string]")opt ) [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]")opt "
[r-char-sequence:](#nt:r-char-sequence "5.13.5 String literals [lex.string]")
[*r-char*](#nt:r-char "5.13.5 String literals [lex.string]") [*r-char-sequence*](#nt:r-char-sequence "5.13.5 String literals [lex.string]")opt
[r-char:](#nt:r-char "5.13.5 String literals [lex.string]")
any member of the translation character set, except a U+0029 right parenthesis followed by
the initial [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]") (which may be empty) followed by a U+0022 quotation mark
[d-char-sequence:](#nt:d-char-sequence "5.13.5 String literals [lex.string]")
[*d-char*](#nt:d-char "5.13.5 String literals [lex.string]") [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]")opt
[d-char:](#nt:d-char "5.13.5 String literals [lex.string]")
any member of the basic character set except:
U+0020 space, U+0028 left parenthesis, U+0029 right parenthesis, U+005c reverse solidus,
U+0009 character tabulation, U+000b line tabulation, U+000c form feed, and new-line
[1](#lex.string-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1850)
The kind of a [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]"),
its type, and
its associated character encoding ([[lex.charset]](lex.charset "5.3.1 Character sets"))
are determined by its encoding prefix and sequence of[*s-char*](#nt:s-char "5.13.5 String literals [lex.string]")*s* or [*r-char*](#nt:r-char "5.13.5 String literals [lex.string]")*s* as defined by Table [12](#tab:lex.string.literal "Table 12: String literals") where n is the number of encoded code units
that would result from an evaluation of the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") (see below)[.](#lex.string-1.sentence-1)
Table [12](#tab:lex.string.literal) — String literals [[tab:lex.string.literal]](./tab:lex.string.literal)
| [ð](#tab:lex.string.literal-row-1)
**Enco-** | **Kind** | **Type** | **Associated** | **Examples** |
| --- | --- | --- | --- | --- |
| [ð](#tab:lex.string.literal-row-2)
**ding** | | | **character** | |
| [ð](#tab:lex.string.literal-row-3)
**prefix** | | | **encoding** | |
| [ð](#tab:lex.string.literal-row-4)
none | [*ordinary string literal*](#def:literal,string,ordinary "5.13.5 String literals [lex.string]") | array of n const char | ordinary literal encoding | "ordinary string" R"(ordinary raw string)" |
| [ð](#tab:lex.string.literal-row-5)
L | [*wide string literal*](#def:literal,string,wide "5.13.5 String literals [lex.string]") | array of n const wchar_t | wide literal encoding | L"wide string" LR"w(wide raw string)w" |
| [ð](#tab:lex.string.literal-row-6)
u8 | [*UTF-8 string literal*](#def:literal,string,UTF-8 "5.13.5 String literals [lex.string]") | array of n const char8_t | UTF-8 | u8"UTF-8 string" u8R"x(UTF-8 raw string)x" |
| [ð](#tab:lex.string.literal-row-7)
u | [*UTF-16 string literal*](#def:literal,string,UTF-16 "5.13.5 String literals [lex.string]") | array of n const char16_t | UTF-16 | u"UTF-16 string" uR"y(UTF-16 raw string)y" |
| [ð](#tab:lex.string.literal-row-8)
U | [*UTF-32 string literal*](#def:literal,string,UTF-32 "5.13.5 String literals [lex.string]") | array of n const char32_t | UTF-32 | U"UTF-32 string" UR"z(UTF-32 raw string)z" |
[2](#lex.string-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1909)
A [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") that has an Rin the prefix is a [*raw string literal*](#def:raw_string_literal "5.13.5 String literals [lex.string]")[.](#lex.string-2.sentence-1)
The[*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]") serves as a delimiter[.](#lex.string-2.sentence-2)
The terminating[*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]") of a [*raw-string*](#nt:raw-string "5.13.5 String literals [lex.string]") is the same sequence of
characters as the initial [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]")[.](#lex.string-2.sentence-3)
A [*d-char-sequence*](#nt:d-char-sequence "5.13.5 String literals [lex.string]") shall consist of at most 16 characters[.](#lex.string-2.sentence-4)
[3](#lex.string-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1919)
[*Note [1](#lex.string-note-1)*:
The characters '(' and ')' can appear in a[*raw-string*](#nt:raw-string "5.13.5 String literals [lex.string]")[.](#lex.string-3.sentence-1)
Thus, R"delimiter((a|b))delimiter" is equivalent to"(a|b)"[.](#lex.string-3.sentence-2)
â *end note*]
[4](#lex.string-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1926)
[*Note [2](#lex.string-note-2)*:
A source-file new-line in a raw string literal results in a new-line in the
resulting execution string literal[.](#lex.string-4.sentence-1)
Assuming no
whitespace at the beginning of lines in the following example, the assert will succeed:const char* p = R"(a\
b
c)";
assert(std::strcmp(p, "a\\\nb\nc") == 0);
â *end note*]
[5](#lex.string-5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1939)
[*Example [1](#lex.string-example-1)*:
The raw stringR"a(
)\
a"
)a" is equivalent to "\n)\\\na\"\n"[.](#lex.string-5.sentence-1)
The raw stringR"(x = "\"y\"")" is equivalent to "x = \"\\\"y\\\"\""[.](#lex.string-5.sentence-2)
â *end example*]
[6](#lex.string-6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1955)
Ordinary string literals and UTF-8 string literals are
also referred to as [*narrow string literals*](#def:literal,string,narrow "5.13.5 String literals [lex.string]")[.](#lex.string-6.sentence-1)
[7](#lex.string-7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1960)
The [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* in
any sequence of adjacent [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* shall have at most one unique [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") among them[.](#lex.string-7.sentence-1)
The common [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") of the sequence is
that [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]"), if any[.](#lex.string-7.sentence-2)
[*Note [3](#lex.string-note-3)*:
A [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s rawness has
no effect on the determination of the common [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")[.](#lex.string-7.sentence-3)
â *end note*]
[8](#lex.string-8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L1972)
In translation phase 6 ([[lex.phases]](lex.phases "5.2 Phases of translation")),
adjacent [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* are concatenated[.](#lex.string-8.sentence-1)
The lexical structure and grouping of
the contents of the individual [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* is retained[.](#lex.string-8.sentence-2)
[*Example [2](#lex.string-example-2)*:
"\xA" "B" represents
the code unit '\xA' and the character 'B' after concatenation
(and not the single code unit '\xAB')[.](#lex.string-8.sentence-3)
Similarly,R"(\u00)" "41" represents six characters,
starting with a backslash and ending with the digit 1 (and not the single character 'A' specified by a [*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]"))[.](#lex.string-8.sentence-4)
Table [13](#tab:lex.string.concat "Table 13: String literal concatenations") has some examples of valid concatenations[.](#lex.string-8.sentence-5)
â *end example*]
Table [13](#tab:lex.string.concat) — String literal concatenations [[tab:lex.string.concat]](./tab:lex.string.concat)
| [ð](#tab:lex.string.concat-row-1)
Source | | Means | Source | | Means | Source | | Means |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [ð](#tab:lex.string.concat-row-2)
u"a" | u"b" | u"ab" | U"a" | U"b" | U"ab" | L"a" | L"b" | L"ab" |
| [ð](#tab:lex.string.concat-row-3)
u"a" | "b" | u"ab" | U"a" | "b" | U"ab" | L"a" | "b" | L"ab" |
| [ð](#tab:lex.string.concat-row-4)
"a" | u"b" | u"ab" | "a" | U"b" | U"ab" | "a" | L"b" | L"ab" |
[9](#lex.string-9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2017)
Evaluating a [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") results in a string literal object
with static storage duration ([[basic.stc]](basic.stc "6.8.6 Storage duration"))[.](#lex.string-9.sentence-1)
[*Note [4](#lex.string-note-4)*:
String literal objects are potentially non-unique ([[intro.object]](intro.object "6.8.2 Object model"))[.](#lex.string-9.sentence-2)
Whether successive evaluations of a[*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") yield the same or a different object is
unspecified[.](#lex.string-9.sentence-3)
â *end note*]
[*Note [5](#lex.string-note-5)*:
The effect of attempting to modify a string literal object is undefined[.](#lex.string-9.sentence-4)
â *end note*]
[10](#lex.string-10)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2031)
String literal objects are initialized with
the sequence of code unit values
corresponding to the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s sequence of[*s-char*](#nt:s-char "5.13.5 String literals [lex.string]")*s* (originally from non-raw string literals) and[*r-char*](#nt:r-char "5.13.5 String literals [lex.string]")*s* (originally from raw string literals),
plus a terminating U+0000 null character,
in order as follows:
- [(10.1)](#lex.string-10.1)
The sequence of characters denoted by each contiguous sequence of[*basic-s-char*](#nt:basic-s-char "5.13.5 String literals [lex.string]")*s*,[*r-char*](#nt:r-char "5.13.5 String literals [lex.string]")*s*,[*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]")*s* ([[lex.ccon]](#lex.ccon "5.13.3 Character literals")), and[*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]")*s* ([[lex.charset]](lex.charset "5.3.1 Character sets"))
is encoded to a code unit sequence
using the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s associated character encoding[.](#lex.string-10.1.sentence-1)
If a character lacks representation in the associated character encoding,
then the program is ill-formed[.](#lex.string-10.1.sentence-2)
[*Note [6](#lex.string-note-6)*:
No character lacks representation in any Unicode encoding form[.](#lex.string-10.1.sentence-3)
â *end note*]
When encoding a stateful character encoding,
implementations should encode the first such sequence
beginning with the initial encoding state and
encode subsequent sequences
beginning with the final encoding state of the prior sequence[.](#lex.string-10.1.sentence-4)
[*Note [7](#lex.string-note-7)*:
The encoded code unit sequence can differ from
the sequence of code units that would be obtained by
encoding each character independently[.](#lex.string-10.1.sentence-5)
â *end note*]
- [(10.2)](#lex.string-10.2)
Each [*numeric-escape-sequence*](#nt:numeric-escape-sequence "5.13.3 Character literals [lex.ccon]") ([[lex.ccon]](#lex.ccon "5.13.3 Character literals"))
contributes a single code unit with a value as follows:
* [(10.2.1)](#lex.string-10.2.1)
Let v be the integer value represented by
the octal number comprising
the sequence of [*octal-digit*](#nt:octal-digit "5.13.2 Integer literals [lex.icon]")*s* in
an [*octal-escape-sequence*](#nt:octal-escape-sequence "5.13.3 Character literals [lex.ccon]") or by
the hexadecimal number comprising
the sequence of [*hexadecimal-digit*](#nt:hexadecimal-digit "5.13.2 Integer literals [lex.icon]")*s* in
a [*hexadecimal-escape-sequence*](#nt:hexadecimal-escape-sequence "5.13.3 Character literals [lex.ccon]")[.](#lex.string-10.2.1.sentence-1)
* [(10.2.2)](#lex.string-10.2.2)
If v does not exceed the range of representable values of
the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s array element type,
then the value is v[.](#lex.string-10.2.2.sentence-1)
* [(10.2.3)](#lex.string-10.2.3)
Otherwise,
if the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]") is absent or L, andv does not exceed the range of representable values of
the corresponding unsigned type for the underlying type of
the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s array element type,
then the value is the unique value of
the [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")'s array element type T that is congruent to v modulo 2N, where N is the width of T[.](#lex.string-10.2.3.sentence-1)
* [(10.2.4)](#lex.string-10.2.4)
Otherwise, the program is ill-formed[.](#lex.string-10.2.4.sentence-1)
When encoding a stateful character encoding,
these sequences should have no effect on encoding state[.](#lex.string-10.2.sentence-2)
- [(10.3)](#lex.string-10.3)
Each [*conditional-escape-sequence*](#nt:conditional-escape-sequence "5.13.3 Character literals [lex.ccon]") ([[lex.ccon]](#lex.ccon "5.13.3 Character literals"))
contributes animplementation-defined
code unit sequence[.](#lex.string-10.3.sentence-1)
When encoding a stateful character encoding,
it isimplementation-defined
what effect these sequences have on encoding state[.](#lex.string-10.3.sentence-2)
### [5.13.6](#lex.string.uneval) Unevaluated strings [[lex.string.uneval]](lex.string.uneval)
[unevaluated-string:](#nt:unevaluated-string "5.13.6 Unevaluated strings [lex.string.uneval]")
[*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")
[1](#lex.string.uneval-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2114)
An [*unevaluated-string*](#nt:unevaluated-string "5.13.6 Unevaluated strings [lex.string.uneval]") shall have no [*encoding-prefix*](#nt:encoding-prefix "5.13.3 Character literals [lex.ccon]")[.](#lex.string.uneval-1.sentence-1)
[2](#lex.string.uneval-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2117)
Each [*universal-character-name*](lex.universal.char#nt:universal-character-name "5.3.2 Universal character names [lex.universal.char]") and each [*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]") in an [*unevaluated-string*](#nt:unevaluated-string "5.13.6 Unevaluated strings [lex.string.uneval]") is
replaced by the member of the translation character set it denotes[.](#lex.string.uneval-2.sentence-1)
An [*unevaluated-string*](#nt:unevaluated-string "5.13.6 Unevaluated strings [lex.string.uneval]") that contains
a [*numeric-escape-sequence*](#nt:numeric-escape-sequence "5.13.3 Character literals [lex.ccon]") or
a [*conditional-escape-sequence*](#nt:conditional-escape-sequence "5.13.3 Character literals [lex.ccon]") is ill-formed[.](#lex.string.uneval-2.sentence-2)
[3](#lex.string.uneval-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2125)
An [*unevaluated-string*](#nt:unevaluated-string "5.13.6 Unevaluated strings [lex.string.uneval]") is never evaluated and
its interpretation depends on the context in which it appears[.](#lex.string.uneval-3.sentence-1)
### [5.13.7](#lex.bool) Boolean literals [[lex.bool]](lex.bool)
[boolean-literal:](#nt:boolean-literal "5.13.7 Boolean literals [lex.bool]")
false
true
[1](#lex.bool-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2138)
The Boolean literals are the keywords false and true[.](#lex.bool-1.sentence-1)
Such literals have type bool[.](#lex.bool-1.sentence-2)
### [5.13.8](#lex.nullptr) Pointer literals [[lex.nullptr]](lex.nullptr)
[pointer-literal:](#nt:pointer-literal "5.13.8 Pointer literals [lex.nullptr]")
nullptr
[1](#lex.nullptr-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2151)
The pointer literal is the keyword nullptr[.](#lex.nullptr-1.sentence-1)
It has typestd::nullptr_t[.](#lex.nullptr-1.sentence-2)
[*Note [1](#lex.nullptr-note-1)*:
std::nullptr_t is a distinct type that is neither a pointer type nor a pointer-to-member type;
rather, a prvalue of this type is a null pointer constant and can be
converted to a null pointer value or null member pointer value[.](#lex.nullptr-1.sentence-3)
See [[conv.ptr]](conv.ptr "7.3.12 Pointer conversions") and [[conv.mem]](conv.mem "7.3.13 Pointer-to-member conversions")[.](#lex.nullptr-1.sentence-4)
â *end note*]
### [5.13.9](#lex.ext) User-defined literals [[lex.ext]](lex.ext)
[user-defined-literal:](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]")
[*user-defined-integer-literal*](#nt:user-defined-integer-literal "5.13.9 User-defined literals [lex.ext]")
[*user-defined-floating-point-literal*](#nt:user-defined-floating-point-literal "5.13.9 User-defined literals [lex.ext]")
[*user-defined-string-literal*](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]")
[*user-defined-character-literal*](#nt:user-defined-character-literal "5.13.9 User-defined literals [lex.ext]")
[user-defined-integer-literal:](#nt:user-defined-integer-literal "5.13.9 User-defined literals [lex.ext]")
[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*octal-literal*](#nt:octal-literal "5.13.2 Integer literals [lex.icon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*hexadecimal-literal*](#nt:hexadecimal-literal "5.13.2 Integer literals [lex.icon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*binary-literal*](#nt:binary-literal "5.13.2 Integer literals [lex.icon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[user-defined-floating-point-literal:](#nt:user-defined-floating-point-literal "5.13.9 User-defined literals [lex.ext]")
[*fractional-constant*](#nt:fractional-constant "5.13.4 Floating-point literals [lex.fcon]") [*exponent-part*](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]")opt [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*digit-sequence*](#nt:digit-sequence "5.13.4 Floating-point literals [lex.fcon]") [*exponent-part*](#nt:exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*hexadecimal-prefix*](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") [*hexadecimal-fractional-constant*](#nt:hexadecimal-fractional-constant "5.13.4 Floating-point literals [lex.fcon]") [*binary-exponent-part*](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*hexadecimal-prefix*](#nt:hexadecimal-prefix "5.13.2 Integer literals [lex.icon]") [*hexadecimal-digit-sequence*](#nt:hexadecimal-digit-sequence "5.13.2 Integer literals [lex.icon]") [*binary-exponent-part*](#nt:binary-exponent-part "5.13.4 Floating-point literals [lex.fcon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[user-defined-string-literal:](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]")
[*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[user-defined-character-literal:](#nt:user-defined-character-literal "5.13.9 User-defined literals [lex.ext]")
[*character-literal*](#nt:character-literal "5.13.3 Character literals [lex.ccon]") [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[ud-suffix:](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")
[*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]")
[1](#lex.ext-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2203)
If a token matches both [*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]") and another [*literal*](#nt:literal "5.13.1 Kinds of literals [lex.literal.kinds]") kind, it
is treated as the latter[.](#lex.ext-1.sentence-1)
[*Example [1](#lex.ext-example-1)*:
123_km is a [*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]"), but 12LL is an[*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")[.](#lex.ext-1.sentence-2)
â *end example*]
The syntactic non-terminal preceding the [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]") in a[*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]") is taken to be the longest sequence of
characters that could match that non-terminal[.](#lex.ext-1.sentence-3)
[2](#lex.ext-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2215)
A [*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]") is treated as a call to a literal operator or
literal operator template ([[over.literal]](over.literal "12.6 User-defined literals"))[.](#lex.ext-2.sentence-1)
To determine the form of this call for
a given [*user-defined-literal*](#nt:user-defined-literal "5.13.9 User-defined literals [lex.ext]") *L* with [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]") *X*,
first let *S* be the set of declarations
found by unqualified lookup for the [*literal-operator-id*](over.literal#nt:literal-operator-id "12.6 User-defined literals [over.literal]") whose literal suffix identifier is *X* ([[basic.lookup.unqual]](basic.lookup.unqual "6.5.3 Unqualified name lookup"))[.](#lex.ext-2.sentence-2)
*S* shall not be empty[.](#lex.ext-2.sentence-3)
[3](#lex.ext-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2226)
If *L* is a [*user-defined-integer-literal*](#nt:user-defined-integer-literal "5.13.9 User-defined literals [lex.ext]"), let *n* be the literal
without its [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")[.](#lex.ext-3.sentence-1)
If *S* contains a literal operator with
parameter type unsigned long long, the literal *L* is treated as a call of
the formoperator ""*X*(*n*ULL)
Otherwise, *S* shall contain a raw literal operator
or a numeric literal operator template ([[over.literal]](over.literal "12.6 User-defined literals")) but not both[.](#lex.ext-3.sentence-3)
If *S* contains a raw literal operator,
the literal *L* is treated as a call of the formoperator ""*X*("*n*")
Otherwise (*S* contains a numeric literal operator template),*L* is treated as a call of the formoperator ""*X*<'c1', 'c2', ... 'ck'>() where *n* is the source character sequence c1c2...ck[.](#lex.ext-3.sentence-5)
[*Note [1](#lex.ext-note-1)*:
The sequencec1c2...ck can only contain characters from the basic character set[.](#lex.ext-3.sentence-6)
â *end note*]
[4](#lex.ext-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2252)
If *L* is a [*user-defined-floating-point-literal*](#nt:user-defined-floating-point-literal "5.13.9 User-defined literals [lex.ext]"), let *f* be the
literal without its [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")[.](#lex.ext-4.sentence-1)
If *S* contains a literal operator
with parameter type long double, the literal *L* is treated as a call of
the formoperator ""*X*(*f*L)
Otherwise, *S* shall contain a raw literal operator
or a numeric literal operator template ([[over.literal]](over.literal "12.6 User-defined literals")) but not both[.](#lex.ext-4.sentence-3)
If *S* contains a raw literal operator,
the [*literal*](#nt:literal "5.13.1 Kinds of literals [lex.literal.kinds]") *L* is treated as a call of the formoperator ""*X*("*f*")
Otherwise (*S* contains a numeric literal operator template),*L* is treated as a call of the formoperator ""*X*<'c1', 'c2', ... 'ck'>() where *f* is the source character sequence c1c2...ck[.](#lex.ext-4.sentence-5)
[*Note [2](#lex.ext-note-2)*:
The sequencec1c2...ck can only contain characters from the basic character set[.](#lex.ext-4.sentence-6)
â *end note*]
[5](#lex.ext-5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2278)
If *L* is a [*user-defined-string-literal*](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]"),
let *str* be the literal without its [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]") and let *len* be the number of code units in *str* (i.e., its length excluding the terminating null character)[.](#lex.ext-5.sentence-1)
If *S* contains a literal operator template with
a constant template parameter for which *str* is
a well-formed [*template-argument*](temp.names#nt:template-argument "13.3 Names of template specializations [temp.names]"),
the literal *L* is treated as a call of the formoperator ""*X*<*str*>()
Otherwise, the literal *L* is treated as a call of the formoperator ""*X*(*str*, *len*)
[6](#lex.ext-6)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2295)
If *L* is a [*user-defined-character-literal*](#nt:user-defined-character-literal "5.13.9 User-defined literals [lex.ext]"), let *ch* be the
literal without its [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")[.](#lex.ext-6.sentence-1)
*S* shall contain a [literal operator](over.literal#def:literal,operator "12.6 User-defined literals [over.literal]") whose only parameter has
the type of *ch* and the
literal *L* is treated as a call
of the formoperator ""*X*(*ch*)
[7](#lex.ext-7)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2306)
[*Example [2](#lex.ext-example-2)*: long double operator ""_w(long double);
std::string operator ""_w(const char16_t*, std::size_t);unsigned operator ""_w(const char*);int main() {1.2_w; // calls operator ""_w(1.2L)u"one"_w; // calls operator ""_w(u"one", 3)12_w; // calls operator ""_w("12")"two"_w; // error: no applicable literal operator} â *end example*]
[8](#lex.ext-8)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2321)
In translation phase 6 ([[lex.phases]](lex.phases "5.2 Phases of translation")), adjacent [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* are concatenated and[*user-defined-string-literal*](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]")*s* are considered [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]")*s* for that
purpose[.](#lex.ext-8.sentence-1)
During concatenation, [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")es are removed and ignored and
the concatenation process occurs as described in [[lex.string]](#lex.string "5.13.5 String literals")[.](#lex.ext-8.sentence-2)
At the end of phase
6, if a [*string-literal*](#nt:string-literal "5.13.5 String literals [lex.string]") is the result of a concatenation involving at least one[*user-defined-string-literal*](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]"), all the participating[*user-defined-string-literal*](#nt:user-defined-string-literal "5.13.9 User-defined literals [lex.ext]")*s* shall have the same [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]") and that suffix is applied to the result of the concatenation[.](#lex.ext-8.sentence-3)
[9](#lex.ext-9)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lex.tex#L2331)
[*Example [3](#lex.ext-example-3)*: int main() {L"A" "B" "C"_x; // OK, same as L"ABC"_x"P"_x "Q" "R"_y; // error: two different [*ud-suffix*](#nt:ud-suffix "5.13.9 User-defined literals [lex.ext]")es} â *end example*]