www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What's wrong with this BinaryHeap declaration line? Assertion failure

reply Enjoys Math <enjoysmath gmail.com> writes:
What I HAD TO do to get it to compile:

programResultsQ = heapify!(compareResults, 
Array!(Results!(O,I)))(Array!(Results!(O,I))([Results!(O,I)()]), 
1);
programResultsQ.popFront();

What running it says:

AssertionFailure at line 381 of std.container.array.d, which 
looks like:

/**
Constructor taking a number of items
      */
     this(U)(U[] values...) if (isImplicitlyConvertible!(U, T))
     {
         import std.conv : emplace;
         auto p = cast(T*) malloc(T.sizeof * values.length);
         static if (hasIndirections!T)
         {
             if (p)
                 GC.addRange(p, T.sizeof * values.length);
         }

         foreach (i, e; values)
         {
             emplace(p + i, e);
             assert(p[i] == e);     /* THIS IS LINE 381 */
         }
         _data = Data(p[0 .. values.length]);
     }

Any ideas.  How can I improve this declaration?  Using Phobos 
sometimes is such a mystery.
Sep 22 2015
parent Enjoys Math <enjoysmath gmail.com> writes:
On Wednesday, 23 September 2015 at 05:56:08 UTC, Enjoys Math 
wrote:
 What I HAD TO do to get it to compile:

 programResultsQ = heapify!(compareResults, 
 Array!(Results!(O,I)))(Array!(Results!(O,I))([Results!(O,I)()]), 1);
 programResultsQ.popFront();

 What running it says:

 AssertionFailure at line 381 of std.container.array.d, which 
 looks like:

 /**
 Constructor taking a number of items
      */
     this(U)(U[] values...) if (isImplicitlyConvertible!(U, T))
     {
         import std.conv : emplace;
         auto p = cast(T*) malloc(T.sizeof * values.length);
         static if (hasIndirections!T)
         {
             if (p)
                 GC.addRange(p, T.sizeof * values.length);
         }

         foreach (i, e; values)
         {
             emplace(p + i, e);
             assert(p[i] == e);     /* THIS IS LINE 381 */
         }
         _data = Data(p[0 .. values.length]);
     }

 Any ideas.  How can I improve this declaration?  Using Phobos 
 sometimes is such a mystery.
I mean initialization... Here's the corresponding declaration: alias ProgramResultsQueue(O,I) = BinaryHeap!(Array!(Results!(O,I)), compareResults); /* module scope */ ProgramResultsQueue!(O,I) programResultsQ; /* class member */ The intialization line occurs in the class's ctor.
Sep 22 2015