Is is possible to define a type-generic macro that supports all standard (unsigned) integer types, and also `size_t`?

`foo((size_t)42)` works with the example below as long as `size_t` refers to one of the standard unsigned integer types. But does the standard guarantee anywhere that this is the case, or could `size_t` also refer to an extended integer type?

```
void foo_bool(_Bool x);
void foo_uchar(unsigned char x);
void foo_ushort(unsigned short x);
void foo_uint(unsigned x);
void foo_ulong(unsigned long x);
void foo_ullong(unsigned long long x);

#define foo(x) _Generic((x), \
    _Bool: foo_bool, \
    unsigned char: foo_uchar, \
    unsigned short: foo_ushort, \
    unsigned: foo_uint, \
    unsigned long: foo_ulong, \
    unsigned long long: foo_ullong)(x)

```