You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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;
}
Jack Applegame (@japplegame) reported this on 2017-03-19T09:56:25Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=17267
CC List
Description
This code compiles: struct A(T) { T* ptr; void m() { pragma(msg, T.sizeof); } } struct B { int i; A!B a; } Following should compile, but doesn't (struct foo.B no size because of forward reference): // example 1 (struct definition inside function) struct A(T) { T* ptr; void m() { pragma(msg, T.sizeof); } } void foo() { static struct B { int i; A!B a; } } // example 2 (sizeof outside member function) struct A(T) { T* ptr; pragma(msg, T.sizeof); } struct B { int i; A!B a; }The text was updated successfully, but these errors were encountered: