On Monday, 29 October 2012 at 14:47:37 UTC, Don Clugston wrote:
One fairly non-disruptive thing we could do: implement code
coverage for templates. Currently, templates get no code
coverage numbers.
We could do a code-coverage equivalent for templates: which
lines actually got instantiated?
I bet this would show _huge_ gaps in the existing test suite.
That's a good step forward, but I don't think it solves (what
appears to me to be) the most common issue: incorrect/missing
template constraints.
auto average(R)(R r) if (isForwardRange!R)
{
return reduce!("a + b")(r) / walkLength(r);
}
(This code can have full coverage for some ranges, but also needs
to also check !isInfinite!R, and probably other things).
These are difficult because every time a constraint changes, you
need to go round and update the constraints of all calling
functions. It's like when you change the types of a function
argument, or return type; except that with template constraints,
nothing is checked until instantiation.