On Monday, 25 April 2016 at 17:52:58 UTC, Andrei Alexandrescu
wrote:
It's been long asked in our community that failing template
constraints issue better error messages. Consider:
This program uses no constraints. Attempting to compile yields:
/d240/f632.d(3): Error: no property 'empty' for type 'NotARange'
/d240/f632.d(3): Error: no property 'popFront' for type
'NotARange'
/d240/f632.d(4): Error: no property 'front' for type 'NotARange'
/d240/f632.d(13): Error: template instance
f632.find!(NotARange, int) error instantiating
which is actually quite informative if you're okay with error
messages pointing inside the template body (which is presumably
a preexisting library) instead of the call site.
It should be possible to generate those errors even with
constraints and no library update.
Currently when the compiler is in "__traits(compiles" or
"is(typeof" mode, it simply gags all errors, if it instead would
save them to a side buffer. Later the entire side-buffer could be
dumped after a template constraint totally failed. If a
constraint succeeds the buffer is cleared.