Der Compiler weiß doch nicht, ob da nicht zufällig später (zur Laufzeit) mal ein Wert drin ist, der da reinpassen könnte.
{$OVERFLOWCHECKS ON}
oder in den Projektoptionen aktivieren.
Der Delphi-Compiler merkt sich nicht den Inhalt von Variablen (aus Konstanten) und kann dann später auch nicht wissen ob es passt.
Drum kann der Compiler auch nicht Bescheid geben, wenn man vergißt ein Result zu initialisieren, welches vom Typ String, dyn. Array, Variant oder Interface ist.
Bei impliziten Downcasts von String auf AnsiString tut er es ja auch...
Wobei der auch meckert, wenn du einen AnsiString an einen UnicodeString übergibst, auch wenn das doch wohl eindeutig passen würde.