Für die korrekte Übergabe der Parameter ist dann der Aufrufer verantwortlich, der sicher den passenden Guard-Code schon drin hat.
Dem würde ich aber härtestens widersprechen. Das schiebt doch nur die Verantwortung von sich weg.
https://de.wikipedia.org/wiki/Fail-Fast
Es ist doch
kein Aufwand einmal eine Klassenmethode
CheckArguments(const bytes: TBytes; const index: NativeInt)
einzuführen, die kannst du überall recyclen. Alternativ bringt z.B. Spring4D gleich ein
Guard.CheckRange(..)
mit (wie viele andere auch). An Prüfungen sollte man wirklich nicht sparen wollen.