- Title
- Using extended integer types with z suffix
- Status
- cd7
- Section
- 5.13.2 [lex.icon]
- Submitter
- Mike Miller
Created on 2023-02-17.00:00:00 last changed 11 months ago
Messages
Date: 2023-02-15.00:00:00
Additional notes (February, 2023) Alerted the chair of SG22 (C/C++ Liaison). Forwarded to EWG at the request of the EWG chair via
cplusplus/papers#1467. EWG 2023-05-11 The "z" suffixes mean std::size_t (or its corresponding
signed type) only. The proposed resolution is accepted by EWG.
Date: 2023-05-12.20:29:43
Proposed resolution (reviewed by CWG 2023-03-03, approved by CWG 2023-05-12): Change in 5.13.2 [lex.icon] paragraph 4 as follows:
If Except for integer-literals containing
a size-suffix, if the value of an integer-literal
cannot be represented by any type in its list and an extended integer
type (6.9.3 [basic.fundamental]) can represent its value, it may have
that extended integer type. If all of the types in the list for
the integer-literal are signed, the extended integer type
shall be is signed. If all of the types in the
list for the integer-literal are unsigned, the extended integer
type shall be is unsigned. If the list contains
both signed and unsigned types, the extended integer type may be
signed or unsigned. A program is ill-formed if one of its
translation units contains If an
integer-literal that cannot be represented by any
of the allowed types, the program is ill-formed.
[ Note: An integer-literal with a z or Z
suffix is ill-formed if it cannot be represented by
std::size_t . -- end note ]
Date: 2023-06-15.00:00:00
[Accepted as a DR at the June, 2023 meeting.] Subclause 5.13.2 [lex.icon] paragraph 4 specifies: This implies that an integer-literal with a z
suffix can be of extended integer type, if the literal is larger than
what is representable in std::size_t . According to the author of the paper
P0330R8
(Literal Suffix for (signed) size_t) introducing the feature, this is
unintentional; z should only yield std::size_t and
its corresponding signed integer type. See also the corresponding WG14 paper
N2998
Literal Suffixes for size_t.
If an integer-literal cannot be represented by any type in its
list and an extended integer type (6.9.3 [basic.fundamental]) can
represent its value, it may have that extended integer type. If all of
the types in the list for the integer-literal are signed, the
extended integer type shall be signed. If all of the types in the list
for the integer-literal are unsigned, the extended integer type
shall be unsigned. If the list contains both signed and unsigned
types, the extended integer type may be signed or unsigned. A program
is ill-formed if one of its translation units contains
an integer-literal that cannot be represented by any of the
allowed types.
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2025-09-12 22:42:26 | admin | set | status: open -> cd7 |
| 2025-09-12 22:42:26 | admin | set | status: drwp -> open |
| 2023-12-19 10:15:28 | admin | set | status: dr -> drwp |
| 2023-07-16 13:00:43 | admin | set | status: ready -> dr |
| 2023-05-12 20:29:43 | admin | set | status: review -> ready |
| 2023-03-03 21:02:53 | admin | set | messages: + msg7216 |
| 2023-03-03 21:02:53 | admin | set | status: open -> review |
| 2023-02-18 23:36:39 | admin | set | messages: + msg7204 |
| 2023-02-17 00:00:00 | admin | create | |