Assuming that String = AnsiString it absolutly not allowed, same for any other managed type (ShortString is not a managed type). This is because the compiler/RTL must be able to correctly apply the type's management functions to the field. If it would be inside a variant record the compiler/RTL would not be able to decide which field is set and thus it might call the management functions on an illegal value.