On Thursday, 23 July 2015 at 20:40:17 UTC, Walter Bright wrote:
On 7/23/2015 12:50 PM, H. S. Teoh via Digitalmars-d wrote:
That assumes the template author is diligent (foolhardy?) enough to
write unittests that cover all possible instantiations...

No, only each branch of the template code must be instantiated, not every possible instantiation. And we have a tool to help with that: -cov

Does anyone believe it is a good practice to ship template code that has never been instantiated?

I dunno about good practices but I have some use cases.

I write a bunch of zero-parameter template methods and then pass them into a Match template which attempts to instantiate each of them in turn, settling on the first one which does compile. So the methods basically form a list of "preferred implementation of functionality X". All but one winds up uninstantiated.

I also use a pattern where I mix in a zero-parameter template methods into a struct - they don't necessarily work for that struct, but they won't stop compilation unless they are instantiated. A complete interface is generated but only the subset which the context actually supports can be successfully instantiated - and anything the caller doesn't need, doesn't get compiled.

Again, not sure if this is a bad or good thing. But I have found these patterns useful.

Reply via email to