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.