I've just noticed an interesting property of gcc with regard to bit-fields. If I create a struct like the following:
template <int N>
struct C
{
unsigned long long data : N;
};
Then on amd64:
- with -m64, for N ∊ <1, 64>,
sizeof(C) == 8; - with -m32, for N ∊ <1, 32>,
sizeof(C) == 4and for N ∊ <33, 64>,sizeof(C) == 8.
(with sizeof(unsigned long long) == 8).
That seems to mostly resemble the C99/C++11 uint_fastXX_t except for the fact that on my system sizeof(uint_fast8_t) == 1. But for example, I can't reproduce anything similar with __int128 (which always results in sizeof(C) == 16).
Does it seem like a good idea to you to use the fore-mentioned struct as a «poor man's» replacement for uint_fastXX_t in C++98?