www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13054] New: pure nothrow safe std.algorithm.schwartzSort

https://issues.dlang.org/show_bug.cgi?id=13054

          Issue ID: 13054
           Summary: pure nothrow  safe std.algorithm.schwartzSort
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: Phobos
          Assignee: nobody puremagic.com
          Reporter: bearophile_hugs eml.cc

In dmd 2.066beta1 this compiles and works correctly:

void main() pure nothrow  safe  nogc {
    import std.algorithm: sort;
    import std.math: abs;
    int[3] data = [-2, 1, 3];
    auto r = data[].sort!q{a.abs < b.abs};
}



But schwartzSort doesn't support each of those tags:


void main() pure nothrow  safe  nogc {
    import std.algorithm: schwartzSort;
    import std.math: abs;
    int[3] data = [-2, 1, 3];
    auto r = data[].schwartzSort!abs;
}


temp.d(5,20): Error: pure function 'D main' cannot call impure function
'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0,
int[]).schwartzSort'
temp.d(5,20): Error: safe function 'D main' cannot call system function
'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0,
int[]).schwartzSort'
temp.d(5,20): Error:  nogc function 'D main' cannot call non- nogc function
'std.algorithm.schwartzSort!(abs, "a < b", cast(SwapStrategy)0,
int[]).schwartzSort'
temp.d(5,20): Error: 'std.algorithm.schwartzSort!(abs, "a < b",
cast(SwapStrategy)0, int[]).schwartzSort' is not nothrow
temp.d(1,6): Error: function 'D main' is nothrow yet may throw


A schwartzSort has to allocate the mapped items, so perhaps it can't be  nogc
(unless you allocate them on the C heap), but I think it can support the other
tags.

--
Jul 06 2014