thanks in objfpc mode i can imagine this ,but it didn't work unless i specialize (obj) type generic obj<T> = object x : T; end; operator + (arg1 ,arg2 : obj):obj; // error : here (obj) needs specialization begin result.x := arg1.x + arg2.x; end;