CODE:
------snip------
import std.stdio;
void listMembers(T)() {
writefln("Size of %s is %d", T.stringof, T.sizeof);
foreach (field; __traits(allMembers, T)) {
writefln("\t%s", field);
}
}
void main() {
int y=1;
struct S1 {
int x;
}
static struct S2 {
int x;
bool opEquals() { return true; }
}
struct S3 {
int x;
bool opEquals() { return true; }
}
struct S4 {
int x;
bool opEquals() { return y==1; }
}
listMembers!S1();
listMembers!S2();
listMembers!S3();
listMembers!S4();
}
------snip------
OUTPUT:
------snip------
Size of S1 is 4
x
Size of S2 is 4
x
opEquals
Size of S3 is 16
x
opEquals
this
Size of S4 is 16
x
opEquals
this
------snip------
S3 is identical to S2 (except for the 'static' qualifier); DMD should not insert the frame pointer since it's not needed.
According to TDPL, the frame pointer is only inserted where needed.
Comment #1 by robert.schadek — 2024-12-13T18:09:01Z