Сбой std.algorithm.sorting с непонятными ошибками при использовании Array!T и opSlice()

Я уверен, что упускаю что-то очевидное здесь - остальная часть D (даже ошибки компилятора) была очень разумной и простой для понимания. у меня есть std.containers.Array сопоставимых структур, и я хотел бы отсортировать его. std.containers документация отмечает, что для того, чтобы использовать материал в std.algorithm Вы должны нарезать его, либо с array[] или же array.opSlice(), Хорошо, без проблем.

Однако, если я сделаю Array из двух довольно тривиальных типов, он не будет сортировать - вместо этого он говорит мне, что рутина глубоко в Фобосе не 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 вызовы терпят неудачу с вышеупомянутыми ошибками компилятора. При сборке с DMD2 из VS Community 2015 я не могу найти идентификатор версии компилятора, но он был загружен только вчера.

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;
}

1 ответ

Решение

Это ошибка в Фобосе: выпуск № 14981

Это было исправлено, как месяц назад, но изменения еще не сделали это в выпуске. Вероятно, будет доступно в версии 2.069.

В качестве временного решения вы можете построить свой проект в режиме релиза.

Другие вопросы по тегам