The ti(size_t) type is not really a built-in primitive data type, but a data
type that is promoted by bi(POSIX) as a typename to be used for non-negative
integral values answering questions like `how much' and `how many', in which
case it should be used instead of ti(unsigned int). It is not a specific
bf(C++) type, but also available in, e.g., bf(C). Usually it is defined
implicitly when a (any) system header file is included. The header file
`officially' defining tt(size_t) in the context of bf(C++) is ti(cstddef).

Using tt(size_t) has the advantage of being a em(conceptual) type, rather than
a standard type that is then modified by a modifier. Thus, it improves
the self-documenting value of source code.

Several suffixes can be used to expicitly specify the intended representation
of integral constants, like tt(42UL) defining 42 as an tt(unsigned long
int). Likewise, suffixes ti(uz) or tt(zu) can be used to specify that an
integral constant is represented as a tt(size_t), as in: tt(cout << 42uz).

Sometimes functions explictly require tt(unsigned int) to be used. E.g., on
ti(amd)-architectures the i(X-windows) function ti(XQueryPointer) explicitly
requires a pointer to an tt(unsigned int) variable as one of its arguments. In
such situations a pointer to a tt(size_t) variable can't be used, but the
address of an tt(unsigned int) must be provided. Such situations are
exceptional, though.

Other useful bit-represented types also exists. E.g., ti(uint32_t) is
guaranteed to hold 32-bits unsigned values. Analogously, ti(int32_t) holds
32-bits signed values. Corresponding types exist for 8, 16 and 64 bits
values. These types are defined in the header file ti(cstdint) and can be very
useful when you need to specify or use integral value types of fixed sizes.

