Consider this code: procedure SplitAt(const _Input: string; _Position: integer; out _Head, _Tail: string); begin _Head := Copy(_Input, 1, _Position-1); _Tail := Copy(_Input, _Position); end; It's meant to split a given string into two parts at the given position. Nothing fancy, really, isn't it? Now, consider this call to the procedure above: var s1: string; s2: … Continue reading When const doesn’t mean const