size_type is meant to hold an unsigned integral. That's about it. There's no other assumption made.
This number must be big enough to hold the maximum number of characters a string can hold.
Since a string maximum lenght is machine/implementation dependant, the size_type companion type was created (as a typedef) to support machine-independant behavior. It can be an int, a long, the number of extra-marital kids the library implementator had at that time.