Text from [support.types] :
The content is the same as the title of the Standard C library with the following changes:
The size_t type is an unsigned integer type defined for implementation that is large enough to contain the size in bytes of any object.
The C99 specification for stddef.h also has this footnote for clarification:
224) Some of these types may indicate extended integer types defined by an implementation.
Since the standard C ++ text does not specifically say that size_t should be a typedef, and since it seems to be based on C99, it seems to me that we should conclude that it can be an extended integer type defined by the implementation.
Having said that, I do not know any implementation for which it is not a typedef.
I'm not sure what you should do with your overload problem, however note that this is not limited to size_t ; there is also ptrdiff_t and all fixed-width integers. The latter are listed as typedef s, however they are allowed to be aliases for extended integer types.
source share