Huge improvement in error messages in recent dmd
Meta
jared771 at gmail.com
Thu Dec 12 02:36:21 UTC 2019
On Thursday, 12 December 2019 at 00:39:15 UTC, mipri wrote:
> Consider the following code with an error:
>
> #! /usr/bin/env rdmd
> import std;
> void main() {
> auto pts = Array!(int[])([0, 0], [5, 5], [0, 1], [0, 2]);
> multiSort!("a[0] < b[0]", "a[1] < b[1]",
> SwapStrategy.unstable)(pts);
> }
>
> The latest version of dmd that's packaged with Fedora is
> 2.086.1. Of this code it says:
>
> ./x266.d(5): Error: template
> std.algorithm.sorting.multiSort!("a[0] < b[0]", "a[1] < b[1]",
> cast(SwapStrategy)0).multiSort cannot deduce function from
> argument types !()(Array!(int[])), candidates are:
> /usr/include/dmd/phobos/std/algorithm/sorting.d(1463):
> std.algorithm.sorting.multiSort!("a[0] < b[0]", "a[1] < b[1]",
> cast(SwapStrategy)0).multiSort(Range)(Range r) if
> (validPredicates!(ElementType!Range, less) &&
> hasSwappableElements!Range)
>
> The nightly I have is v2.089.1-beta.1, and it says:
>
> x266.d(5): Error: template
> std.algorithm.sorting.multiSort!("a[0] < b[0]", "a[1] < b[1]",
> cast(SwapStrategy)0).multiSort cannot deduce function from
> argument types !()(Array!(int[])), candidates are:
> /edit/nightly/dmd2/linux/bin64/../../src/phobos/std/algorithm/sorting.d(1466): multiSort(Range)(Range r)
> with Range = Array!(int[])
> must satisfy the following constraint:
> hasSwappableElements!Range
>
> Which is a huge, huge improvement! The problem is that
> Array!(Point) doesn't satisfy hasSwappableElements.
>
> I saw that this was also in the v2.089.0 compiler, and so
> checked the blog for announcements back to v2.087, and none of
> them showed how much better the error messages got. This should
> be highlighted. I don't normally care that much about staying
> exactly up-to-date with compilers, but I'd sure have upgraded
> earlier for this.
>
> A slightly strange thing is that rdmd's error messages are
> even friendlier (v2.089.0):
>
> ./x266.d(5): Error: template
> std.algorithm.sorting.multiSort!("a[0] < b[0]", "a[1] < b[1]",
> cast(SwapStrategy)0).multiSort cannot deduce function from
> argument types !()(Array!(int[])), candidates are:
>
> /edit/latest/dmd2/linux/bin64/../../src/phobos/std/algorithm/sorting.d(1466): multiSort(Range)(Range r)
> with Range = Array!(int[])
> whose parameters have the following constraints:
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> validPredicates!(ElementType!Range, less)
> > hasSwappableElements!Range
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Tip: not satisfied constraints are marked with >
>
> wow!
Huh, I thought I was keeping up to date with the stuff in every
new release, but apparently not, as I had no idea that template
constraint function error messages had been improved.
More information about the Digitalmars-d
mailing list