Is C++11's long long really at least 64 bits?

c++, c++11, long-long

Solution

The C++ standard references the C standard for this, see [c.limits]. `LLONG_MAX` is defined in `<climits>` with the same meaning as C's `<limits.h>`'s `LLONG_MAX`. And this is what C has to say:

5.2.4.2.1 Sizes of integer types `<limits.h>`

The values given below shall be replaced by constant expressions suitable for use in `#if` preprocessing directives. [...] Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.

[...]

-- maximum value for an object of type `long long int`

`LLONG_MAX +9223372036854775807 //` 263 -1

A signed type that must be capable of representing the value `9223372036854775807` requires 64 bits or more.

Problem

It says on wikipedia and in Stroustrup's FAQ that type `long long` is at least as long as an `int` and has no fewer than 64 bits. I have been looking at the C++11 standard §3.9.1 Fundamental Types section and I cannot find any reference to 64 bits. All I can find is that it is at least as long at `long int`, which is at least as long as `int`. The standard lists `long long` as a standard integer type, as opposed to an extended one, so I am wondering whether this assertion that `long long` holds at least 64 bits is true. And if it is, where is it stated? Please note that I am talking about C++11 standard `long long` only.

Original source