You're right. N4567 3.9.1 [basic.fundamental] paragraph 3 says:
The signed and unsigned integer types shall satisfy the constraints
given in the C standard, section 5.2.4.2.1.
My earlier post was based on N4842, which is a working draft for C++20
(and happens to be the document that I had open at the time). In that
draft, 6.8.1 [basic.fundamental] paragraph 3 includes a table showing
the minimum widths of the 5 signed integer types:
Type Minimum width N
signed char 8
short 16
int 16
long 32
long long 64
The widths are sufficient to specify the ranges, since unlike the
current edition of the C++ standard, N4842 mandates 2's-complement
for signed integers, including the extra negative value:
The range of representable values for a signed integer type is
−2**(N−1) to 2**(N−1) − 1 (inclusive), where N is called the *width*
of the type.
...
An unsigned integer type has the same object representation,
value representation, and alignment requirements (6.7.6) as
the corresponding signed integer type. For each value x of a
signed integer type, the value of the corresponding unsigned
integer type congruent to x modulo 2**N has the same value of
corresponding bits in its value representation.
(expressions tweaked to avoid superscripts).
Of course N4842 is not a standard, and I should have checked the current
edition.