All these types uint8, uint16, uint32, uint64 are not standard fundamental types and they are either typedef names or implementation defined types
As for uint64 then it can be defined for example as
typedef unsigned long long uint64;
Take into account that sizes of integral types are implementation defined. So it could be that in the definition above it is enough to use unsigned long
because on some platform sizeof( unsigned long)
can be equal to 8 bytes.
If you want to use standard integral types that do not depend on used platform then you should include header <cstdint>
There are the following unsigned type definitions among other defined types
typedef unsigned integer type uint8_t; // optional
typedef unsigned integer type uint16_t; // optional
typedef unsigned integer type uint32_t; // optional
typedef unsigned integer type uint64_t; // optional
typedef unsigned integer type uint_fast8_t;
typedef unsigned integer type uint_fast16_t;
typedef unsigned integer type uint_fast32_t;
typedef unsigned integer type uint_fast64_t;
typedef unsigned integer type uint_least8_t;
typedef unsigned integer type uint_least16_t;
typedef unsigned integer type uint_least32_t;
typedef unsigned integer type uint_least64_t;