> On Nov 28, 2018, at 7:26 PM, Sven Barth via fpc-pascal > <fpc-pascal@lists.freepascal.org> wrote: > > Because that is not supposed to work. Generic routines are *routines*, not > types. You can't define aliases for routines either, not to mention the > problems with scoping as generic methods exist as well.
It seems natural you could specialize a generic procedure because you can do this for all other generic types. Maybe a type isn’t the right way but it feels like there should be some way to specialize the procedure header outside of a begin/end block. I know you can't make aliases to procedures but generics are more of “instantiating a template” which falls outside the scope the language in general. > > Generic routines however have a different boon in Delphi that I plan to add > as well: inference of the type parameters based on the parameters the user > passed. In that case the type parameter clause as well as the "specialize" in > non-Delphi modes would not need to be used and it would look like a normal, > non-generic call. That’s probably the best way (Swift does this and I always wondered why FPC doesn’t) but it won’t work unless the parameters contain the generic parameter, which is a minority of generics functions anyways. Just to be sure, you mean like this? generic procedure DoThis<T>(msg:T); begin end; begin DoThis(‘hello’); // compiles as “specialize DoThis<string>(‘hello’)” because param types match generic parameter types If all that’s involved is comparing params types to generic types then that looks like a relatively simple solution. Const generic params may have complicated this some however. Regards, Ryan Joseph _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal