L
Ist ein Arzt anwesend? Irgendwie klingt der Beitrag ziemlich verzweifelt.
Ok zu den Punkten:
1. <klasse>::size_type ist in vielen Klassen und Templates der Standardbibliothek vorgegeben und ein typedef auf size_t. Damit ist (z.B.) string::size_type ein size_t.
2. Er kann die Größe des größten möglichen Objekts aufnehmen, nicht die größte Zahl die vom System repräsentiert werden kann. Das heisst im Klartext, dass Du gerne mit größeren Zahlen als size_t unterstützt rechnen kannst, dennoch wirst Du vom Betriebssystem nie mehr als (z.B.) 4 GB am Stück bekommen. In diesem Fall müsste size_t nur 32 Bit haben, obwohl die Plattform das Rechnen bis 128 Bit unterstützen kann (alles beispielhaft).
Demnach kannst Du nicht einfach unsigned long schreiben, da size_t durchaus kleiner als long sein könnte.
3. Long hat nicht immer 4 Byte egal wo. Long ist lediglich so groß wie oder größer als Int. Allerdings steckt in der zitierten Aussage natürlich auch die Prämisse, dass dort, wo "size_t" ein typedef für "unsigned int" ist, auch genug Platz in "unsigned int" zur Verfügung steht. Aber dort steht schließlich auch nicht "immer", sondern "meist".
4. siehe 2.
Zu Deinem Vector(0):
Natürlich ist das sinnlos, aber Du musst immer damit rechnen dass der Anwender Dein Feind ist und Sachen macht, die Du Dir nie vorstellen könntest. Aber das ist IMHO auch logisch, denn jeder kennt seine eigene Anwendung und weiss wie er sie bedienen sollte, und damit unbewusst auch wie man sie nicht bedienen darf. Unbedarften Benutzern (und sei Benutzer in dem Sinne dass ein Entwickler Deine Klasse benutzt) fällt immer noch was ein was Du übersehen hast, glaube mir
EDIT:
Und beim nächsten Mal schreibe ich erst den Beitrag zuende und verlasse dann für 10 Minuten das Büro :p