.sort property for array of structs broken in DMD 2 ?
Extrawurst
spam at extrawurst.org
Tue Sep 2 15:41:57 PDT 2008
Did u file a bugreport ? If there is not already one for this, cause i
think it is a known issue
Sivo Schilling wrote:
> Below a small program testing the .sort property for an array of
> structs.
>
> ---
> // Test of opCmp for structs
>
> import std.stdio;
> import std.string;
>
> struct S
> {
> string face;
>
> int opCmp(S rhs)
> {
> int fcmp = cmp(face, rhs.face);
> return fcmp;
> }
> }
>
> void testOpCmp()
> {
> S[] faces = new S[5];
>
> faces[0].face = "Morgens";
> faces[1].face = "Mittags";
> faces[2].face = "Abends";
> faces[3].face = "Nachts";
> faces[4].face = "Immer";
>
> writefln("faces before .sort");
> foreach(int i, S f; faces) writefln("i = %d, face = %s", i, f.face);
>
> faces = faces.sort;
>
> writefln("faces after .sort");
> foreach(int i, S f; faces) writefln("i = %d, face = %s", i, f.face);
> }
>
> void main()
> {
> testOpCmp();
> }
> ---
> The output of the program compling with DMD 1.034 is as expected:
>
> faces before .sort
> i = 0, face = Morgens
> i = 1, face = Mittags
> i = 2, face = Abends
> i = 3, face = Nachts
> i = 4, face = Immer
>
> faces after .sort
> i = 0, face = Abends
> i = 1, face = Immer
> i = 2, face = Mittags
> i = 3, face = Morgens
> i = 4, face = Nachts
>
> But compiling with DMD 2.018 without any modification of the code
> the program outputs:
>
> faces before .sort
> i = 0, face = Morgens
> i = 1, face = Mittags
> i = 2, face = Abends
> i = 3, face = Nachts
> i = 4, face = Immer
>
> faces after .sort
> i = 0, face = Mittags
> i = 1, face = Morgens
> i = 2, face = Nachts
> i = 3, face = Abends
> i = 4, face = Immer
>
> The output of course indicates that the opCmp member of S is completly
> ignored and that realy happens in this case (easy to proof).
>
> But then the .sort property at least for arrays of structs is not much
> useful.
>
> Any ideas ?
>
> Regards.
More information about the Digitalmars-d-learn
mailing list