How can I define a type uintptr such that it can hold at least a uint32_t and a uintptr_t, without resorting to a union?
Were sizeof() allowed in the preprocessor, this would accomplish what I want:
#include <inttypes.h>
#if sizeof(uint32_t) > sizeof(uintptr_t) // unlikely, but the standard allows it
typedef uint32_t uintptr;
#else
typedef uintptr_t uintptr;
#endif
It is extremely likely that uint32_t will be smaller if not equal to uintptr_t but the standard makes no guarantee. That said, such a platform would be very rare, so for now I've solved this by just having the following:
static_assert(sizeof(uint32_t) <= sizeof(uintptr_t), "Yikes");
typedef uintptr_t uintptr;