On Tuesday, 16 May 2017 at 09:04:32 UTC, Nick Treleaven wrote:
...
foreach(i, T; types!args) {
typeof(args) ;-)
Thanks :)
static if (is(T == string)) {
pragma(msg, format!"Argument %d is a string, which
is not supported"
(i+1));
The problem with this approach is all the work required to
convert existing code to use this style. Breaking the binary
ops of the constraint into parts and reporting which failed (as
the other replies mention) already would work with existing
code, even if your approach can allow better messages. The
binary ops part would immediately bring a huge improvement,
despite any deficiencies.
That's not a problem. In cases where compiler-provided diagnostic
is sufficient, nothing will need to be done.
I think we should allow inline constraints*, non-inline
constraints can still be used/combined. Inline constraints are
easier to read and relate to what they affect, allowing any
non-inline constraint to be considered as something with a
wider scope (i.e., multiple arguments).
No matter if it's inline or trailing, it needs way, *way* better
reporting than what we have now, so if you were to prioritize,
which one would you solve first? :)