Logically, there is no need to use the type keyword when the code is already part of an existing type declaration section. In this way,
type TRec1 = record end; TRec2 = record end;
creates types that are indistinguishable from
type TRec1 = record end; type TRec2 = record end;
However, as you find out, the compiler has a limitation that requires all conversion declarations to be fully resolved by the end of the section where the direct declaration was introduced.
There is no particular reason for this to be so. This would be great if the compiler could mitigate this limitation. One can only assume that the detail of the compiler implementation, which probably arose a very long time ago, leaked into the language specification.
source share