Wenn die Strukturen identisch sind, gings das ja schon immer:
move S1 S2
eval S2 = S1;

Für differenziertere Betrachtungen muss eine DS per Qualified definiert werden, dann kann man mit
eval-corr S2 = S1;
alle Felder mit identischem Namen und kompatibler Definition übertragen.
Kompatibel heißt: alle numerischen wenn die Werte nicht abgeschnitten werden, char nur mit char und UCS2 nur mit UCS2.
Der Kompiler listet am Ende dann die Felder an, die übertragen wurde, und die Inkompatiblen mit Fehlergrund.