On Wednesday, 30 December 2015 at 16:41:51 UTC, Adam D. Ruppe
wrote:
BTW wouldn't it be great if the compiler's error messages
showed each level of pass/fail for those constraints? For the
docs, I don't mind doing a few special case, hand written
things, but the compiler needs something a bit more generic.
I think the way to code that is whenever the compiler is
printing an expression that can convert to bool, color it based
on the result, and do this through the whole tree from the
bottom up.
Then the use could tell at a glance which parts succeeded and
failed when reading the error message.
It'd be kinda nice if it showed the result of non-bool things
too but that's going to be hard to do on a console without
becoming a wall of text, even with whitespace formatting...
But the compiler will come later, for now I gotta do docs!
I was personally thinking that it can't be horribly difficult
that given a function signature:
void foo(T)(T arg) if(constraintA!T && constraintB!T ||
constraintC!T)
That if this cannot be instantiated the compiler prints something
like
"Candidate foo(T)(T arg) fails with (true && false || false)"
I sometimes found myself putting static
assert(<copy-pasted-segment-of-constraints-with-my-type>, "Result
is blabla") and recompiling just to debug these :/