<div>Hi</div><div>š</div><div>That always keeps me wondering - why neither FPC, no any other mainstream static-type language implements specialization based not only on types, but on compile-time constants as well?</div><div>š</div><div>I mean something like</div><div><div>š</div><div>š TGenericList<T,options> = class</div><div>ššš ...</div><div>š end;</div><div>š</div></div><div>procedure TGenericList<T,options>.Delete(index:integer);</div><div>begin</div><div>š if (nnNotifyDelete in options) and Assigned(FOnDelete) then</div><div>šššš FOnDelete(...);</div><div>š end;</div><div>end;</div><div>š</div><div>// usage</div><div>type</div><div><div>š TMyList = specialize TGenericList<integer, [nnNotifyAdd, nnNotifyDelete, nnNotifyChange]>;</div><div>š</div></div><div>... that "if (nnNotifyDelete in options) " condition will optimized out by compiler if options lack corresponding enum constant.</div><div><div>Of course, FOnDelete property should be omitted as well in ideal case. That might require something like "static if" in D.</div><div>š</div></div><div>I've done that trick for ages using m4 preprocessor and it works really good, why it's still not supported natively by compilers themselves?</div><div>š</div><div>20.02.2016, 02:05, "Sven Barth" <pascaldragon@googlemail.com>:</div><blockquote type="cite">There's no need for a sample. This degradation is the whole reason why the non-generic classes TFPObjectList and TFPList exist compared to TObjectList and TList which do have notifications.<p>Regards,<br /> Sven</p>,<p>_______________________________________________<br />fpc-pascal maillist - <a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a><br /><a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a></p></blockquote><div>š</div><div>š</div><div>-- <br />Regards,</div><div>Denis Golovan</div><div>š</div>