Kannst du das Assign nicht einfach mit einem Implicit-Operator implementieren?
Delphi-Quellcode:
class operator TAtomicInteger<T>.Implicit(A: Integer): TAtomicInteger<T>;
begin
Result.Assign(A);
end;
Leider nein. Das Problem hierbei ist, dass Delphi beim Zuweisen eine neue temporäre RValue erstellt. Result liegt praktisch an einer komplett neuen Adresse auf dem Stack - würde dann zwar atomar zugewiesen (was natürlich sinnlos ist) - und dann nicht atomar der vorhandenen LValue zugewiesen.