[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)<br>**Kind of [*integer-literal*](#nt:integer-literal "5.13.2 Integer literals [lex.icon]")** | **base N** |
| --- | --- |
| [ð](#tab:lex.icon.base-row-2)<br>[*binary-literal*](#nt:binary-literal "5.13.2 Integer literals [lex.icon]") | 2 |
| [ð](#tab:lex.icon.base-row-3)<br>[*octal-literal*](#nt:octal-literal "5.13.2 Integer literals [lex.icon]") | 8 |
| [ð](#tab:lex.icon.base-row-4)<br>[*decimal-literal*](#nt:decimal-literal "5.13.2 Integer literals [lex.icon]") | 10 |
| [ð](#tab:lex.icon.base-row-5)<br>[*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)<br>**[*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)<br>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)<br>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)<br>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)<br>Both u or U | unsigned long int | unsigned long int |
| [ð](#tab:lex.icon.type-row-16)<br>and l or L | unsigned long long int | unsigned long long int |
| [ð](#tab:lex.icon.type-row-17)<br>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)<br>Both u or U | unsigned long long int | unsigned long long int |
| [ð](#tab:lex.icon.type-row-20)<br>and ll or LL |  |  |
| [ð](#tab:lex.icon.type-row-21)<br>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)<br>Both u or U | std​::​size_t | std​::​size_t |
| [ð](#tab:lex.icon.type-row-25)<br>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)<br>**Encoding** | **Kind** | **Type** | **Associated char-** | **Example** |
| --- | --- | --- | --- | --- |
| [ð](#tab:lex.ccon.literal-row-2)<br>**prefix** |  |  | **acter encoding** |  |
| [ð](#tab:lex.ccon.literal-row-3)<br>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)<br> | multicharacter literal | int | encoding | 'abcd' |
| [ð](#tab:lex.ccon.literal-row-5)<br>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)<br>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)<br>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)<br>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)<br>**character** | | **[*simple-escape-sequence*](#nt:simple-escape-sequence "5.13.3 Character literals [lex.ccon]")** |
| --- | --- | --- |
| [ð](#tab:lex.ccon.esc-row-2)<br>U+000a | line feed | \n |
| [ð](#tab:lex.ccon.esc-row-3)<br>U+0009 | character tabulation | \t |
| [ð](#tab:lex.ccon.esc-row-4)<br>U+000b | line tabulation | \v |
| [ð](#tab:lex.ccon.esc-row-5)<br>U+0008 | backspace | \b |
| [ð](#tab:lex.ccon.esc-row-6)<br>U+000d | carriage return | \r |
| [ð](#tab:lex.ccon.esc-row-7)<br>U+000c | form feed | \f |
| [ð](#tab:lex.ccon.esc-row-8)<br>U+0007 | alert | \a |
| [ð](#tab:lex.ccon.esc-row-9)<br>U+005c | reverse solidus | \\ |
| [ð](#tab:lex.ccon.esc-row-10)<br>U+003f | question mark | \? |
| [ð](#tab:lex.ccon.esc-row-11)<br>U+0027 | apostrophe | \' |
| [ð](#tab:lex.ccon.esc-row-12)<br>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)<br>**[*floating-point-suffix*](#nt:floating-point-suffix "5.13.4 Floating-point literals [lex.fcon]")** | **type** |
| --- | --- |
| [ð](#tab:lex.fcon.type-row-2)<br>none | double |
| [ð](#tab:lex.fcon.type-row-3)<br>f or F | float |
| [ð](#tab:lex.fcon.type-row-4)<br>l or L | long double |
| [ð](#tab:lex.fcon.type-row-5)<br>f16 or F16 | std​::​float16_t |
| [ð](#tab:lex.fcon.type-row-6)<br>f32 or F32 | std​::​float32_t |
| [ð](#tab:lex.fcon.type-row-7)<br>f64 or F64 | std​::​float64_t |
| [ð](#tab:lex.fcon.type-row-8)<br>f128 or F128 | std​::​float128_t |
| [ð](#tab:lex.fcon.type-row-9)<br>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)<br>**Enco-** | **Kind** | **Type** | **Associated** | **Examples** |
| --- | --- | --- | --- | --- |
| [ð](#tab:lex.string.literal-row-2)<br>**ding** |  |  | **character** |  |
| [ð](#tab:lex.string.literal-row-3)<br>**prefix** |  |  | **encoding** |  |
| [ð](#tab:lex.string.literal-row-4)<br>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)<br>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)<br>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)<br>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)<br>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)<br>Source | | Means | Source | | Means | Source | | Means |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| [ð](#tab:lex.string.concat-row-2)<br>u"a" | u"b" | u"ab" | U"a" | U"b" | U"ab" | L"a" | L"b" | L"ab" |
| [ð](#tab:lex.string.concat-row-3)<br>u"a" | "b" | u"ab" | U"a" | "b" | U"ab" | L"a" | "b" | L"ab" |
| [ð](#tab:lex.string.concat-row-4)<br>"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*]
