type cl = class where T: constructor; public procedure pr(a: IEnumerable); where G: integer; begin var tt := a.OrderBy(x -> begin var d: T := new T(); result := x end).ToList; assert(tt[0] = 1); assert(tt[1] = 2); assert(tt[2] = 3); end; end; begin var t := new cl(); t.pr(Seq(3,2,1)); end.