std.algorithm.sort with copy constructors

Gregor Mückl gregormueckl at
Mon Apr 13 13:27:09 UTC 2020


Consider the following code:


import std;

struct S {
     pure this(ref return scope const S rhs) nothrow @nogc {
         this.x = x;

     int x;

void main()
     S[] array = new S[10];
     array.sort!("a.x < b.x", SwapStrategy.stable);


In this program, sort compiles only if the copy constructor is 
decorated with pure, nothrow and @nogc. This is very limiting. Is 
there a way to get rid of nothrow and @nogc on the copy 
constructor and still use sort?

My actual use case, inefficient as it may be, is to sort structs 
that use copy constructors to enforce deep copies of their 
contents. So there's liberal use of .dup in them, which obviously 
is neither nothrow nor @nogc.


More information about the Digitalmars-d-learn mailing list