Since it's (IIRC) a local directive, you can use helpers from other units (e.g. sysutils) without adding a mode switch to the current one.
Please don't confuse the terms here: it's
not a local directive. A local directive is one that you can use anywhere inside a unit.
$Modeswitch is
always a global directive and can only be used
before the
uses-section (or the first declaration if there is no such section or the
begin if even those are missing). Also all directives are specific to the unit or program/library/package file. It's just that some directives make no sense in every context (e.g. the global directive
$AppType only makes sense inside the main program file).
Does the .ToString work on any (simple) data type?
It will only work if the data type has a type helper declared, that type helper is in scope and that type helper has a method or property named
ToString.