On Wednesday, 14 January 2015 at 08:31:13 UTC, Ali Çehreli wrote:
First a reminder that this sort of question is more suitable to the D.learn newsgroup.

On 01/13/2015 10:41 PM, qqiang wrote:

> The following code:
> ```D
> template PowerHeap(T) {
>      import std.container : SList;
>
>      private alias PowerForest = SList!PowerNode;
>
>      private final class PowerNode {
>          ...
>      }
>
>      final class PowerHead {
>          ...
>      }
> }
>
> unittest {
>      PowerHeap!int h;
> }
> ```

I started with your code and produced the following one:

template PowerHeap(T) {
    import std.container : SList;

    private alias PowerForest = SList!PowerNode;

    private final class PowerNode {
        // ...
    }

    final class PowerHead {
        // ...
    }
}

unittest {
    PowerHeap!int h;    // <-- Compilation error here
}

void main()
{}

> failed to compile and get the error: PowerHeap!int.PowerNode:
no size
> yet for forward reference.

What compiler and version are you using? I received a different error with the git head dmd:

  Error: PowerHeap!int is used as a type

The compiler is right, PowerHeap!int is a template instantiation that wraps a number of definitions. Did you mean one of those? The following compiles:

unittest {
    PowerHeap!int.PowerHead h;    // <-- now compiles
}

> I've googled and found no straightforward solution to this
issue. The
> how can I modify my code to eliminate this error?

Please provide exact code so that... Oh, wait! I've just noticed that your error message has PowerHeap!int.PowerNode in it. Let me try with that:

unittest {
    PowerHeap!int.PowerNode h;    // <-- this compiles as well
}

Yeah, please provide exact code. :)

Ali

Thanks for your reminder.

I'm sorry that I've provided wrong code. This is the exact code:

-------------------------------------------------------------------

template PowerHeap(T) {
    import std.container : SList;

    private alias PowerForest = SList!PowerNode;

    private final class PowerNode {
        private {
            T payload_;
            uint rank_;
            PowerForest children_;
        }
    }

    final class PowerHeap {
        private {
            PowerNode top_;
            PowerForest forest_;
            uint size_;
        }
    }
}

unittest {
    PowerHeap!int h;
}

----------------------------------------------------------------------
My compiler is v2.066.1

Reply via email to