使用Array时,std.algorithm.排序失败,出现模糊的错误!T和opSlice()



我肯定我在这里错过了一些明显的东西- D的其余部分(甚至编译器错误)已经非常明智和容易理解。我有一个类似结构的std.containers.Array,我想对它排序。std.containers文档指出,为了使用的东西在std.algorithm你需要切片它,无论是array[]array.opSlice()。好的,没问题。

然而,如果我用两个非常简单的类型创建一个Array,它不会排序——相反,它告诉我Phobos内部的例程不是nothrow (?)

B:libDdmd2windowsbin....srcphobosstdrangepackage.d(7189): Error: 'std.range.SortedRange!(RangeT!(Array!(MyInt)), "a < b").SortedRange.dbgVerifySorted' is not nothrow
B:libDdmd2windowsbin....srcphobosstdalgorithmsorting.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调用由于上述编译器错误而失败。用vscommunity 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的bug: Issue #14981

一个月前就修复了,但是还没有发布。可能在2.069年可用。

作为一种解决方法,现在你可以在发布模式下构建你的项目。

相关内容

  • 没有找到相关文章

最新更新