std.algorithm.sorting 使用 Array!T 和 opSlice() 时失败并出现模糊错误
std.algorithm.sorting fails with obscure errors when using Array!T and opSlice()
我确定我在这里遗漏了一些明显的东西 - D 的其余部分(甚至是编译器错误)都非常明智且易于理解。我有一个 std.containers.Array
的可比结构,我想对它进行排序。 std.containers
文档指出,为了使用 std.algorithm
中的内容,您需要使用 array[]
或 array.opSlice()
对其进行切片。好的,没问题。
但是,如果我对两个非常琐碎的类型进行 Array
,它不会排序 - 相反,它告诉我 Phobos 深处的例程不是 nothrow (?)
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\range\package.d(7189): Error: 'std.range.SortedRange!(RangeT!(Array!(MyInt)), "a < b").SortedRange.dbgVerifySorted' is not nothrow
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\sorting.d(982): Error: template instance std.range.assumeSorted!("a < b", RangeT!(Array!(MyInt))) error instantiating
main.d(21): instantiated from here: sort!("a < b", cast(SwapStrategy)0, RangeT!(Array!(MyInt)))
下面是最小示例。第一个 sort
(自动生成的两个值的标准数组)排序很好。其他 sort
调用因上述编译器错误而失败。使用 VS Community 2015 中的 DMD2 构建,我找不到编译器版本标识符,但这是昨天才下载的。
import std.array;
import std.container.array;
import std.algorithm.sorting;
struct MyInt
{
int data;
int opCmp(MyInt o)
{
return data - o.data;
}
}
int main(string[] argv)
{
MyInt ami, bmi;
Array!MyInt arr = [ ami, bmi ];
sort([ami, bmi]);
sort(arr[0..2]);
sort(arr[]);
sort(arr.opSlice());
return 0;
}
这是 Phobos 中的错误:Issue #14981
它大约在一个月前就已修复,但更改尚未发布。可能会在 2.069 中可用。
作为目前的解决方法,您可以在发布模式下构建项目。
我确定我在这里遗漏了一些明显的东西 - D 的其余部分(甚至是编译器错误)都非常明智且易于理解。我有一个 std.containers.Array
的可比结构,我想对它进行排序。 std.containers
文档指出,为了使用 std.algorithm
中的内容,您需要使用 array[]
或 array.opSlice()
对其进行切片。好的,没问题。
但是,如果我对两个非常琐碎的类型进行 Array
,它不会排序 - 相反,它告诉我 Phobos 深处的例程不是 nothrow (?)
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\range\package.d(7189): Error: 'std.range.SortedRange!(RangeT!(Array!(MyInt)), "a < b").SortedRange.dbgVerifySorted' is not nothrow
B:\lib\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\sorting.d(982): Error: template instance std.range.assumeSorted!("a < b", RangeT!(Array!(MyInt))) error instantiating
main.d(21): instantiated from here: sort!("a < b", cast(SwapStrategy)0, RangeT!(Array!(MyInt)))
下面是最小示例。第一个 sort
(自动生成的两个值的标准数组)排序很好。其他 sort
调用因上述编译器错误而失败。使用 VS Community 2015 中的 DMD2 构建,我找不到编译器版本标识符,但这是昨天才下载的。
import std.array;
import std.container.array;
import std.algorithm.sorting;
struct MyInt
{
int data;
int opCmp(MyInt o)
{
return data - o.data;
}
}
int main(string[] argv)
{
MyInt ami, bmi;
Array!MyInt arr = [ ami, bmi ];
sort([ami, bmi]);
sort(arr[0..2]);
sort(arr[]);
sort(arr.opSlice());
return 0;
}
这是 Phobos 中的错误:Issue #14981
它大约在一个月前就已修复,但更改尚未发布。可能会在 2.069 中可用。
作为目前的解决方法,您可以在发布模式下构建项目。