в си
Это многое объясняет, спасибо.
А верните само значение из функции, зачем плодить лишний код ?
Смысл GetPointer()^.DoSomething() как раз в сокращении кода. Тип возврата функции компилятору известен.

На мой взгляд в языке со строгой типизацией для критически важных объектов фокусы вроде попытки прочитать INT вместо BYTE должны пресекаться на ранних этапах.