[Issue 17267] Forward reference error in recursive template

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Dec 27 10:00:52 UTC 2017


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

Simen Kjaeraas <simen.kjaras at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |simen.kjaras at gmail.com

--- Comment #2 from Simen Kjaeraas <simen.kjaras at gmail.com> ---
Another, possibly simplified example:

// Mixed templates
struct S1 {
    S2!()* arr;
}
struct S2()
{
    // struct S1 no size because of forward reference
    private byte[S1.sizeof] payload;
}

It seems to be caused by some ordering issues in DMD, where it tries to
calculate the size of S1, notices that it depends on a templated type, and just
up and dies.

Note also that these variants compile:

// No templates
struct S3 {
    S4* arr;
}
struct S4 {
    private byte[S3.sizeof] payload;
}

// All templates
struct S5() {
    S6!()* arr;
}
struct S6() {
    private byte[S5!().sizeof] payload;
}
S6!() dummy; // Force instantiation

// Mixed templates, revisited
struct S7() {
    S8* arr;
}
struct S8
{
    private byte[S7!().sizeof] payload;
}

--


More information about the Digitalmars-d-bugs mailing list