For this program I'm getting an "Error: need 'this' to access
member x" at line (*). Does that mean that we cannot alias a
property as an argument of a template mixin?
import std.stdio;
mixin template T(alias a) {
void f() {
writeln(a); // (*)
}
}
struct S {
int x;
}
void main() {
auto s = S(4);
mixin T!(s.x);
f();
}
If I change main() as follows, I still get the same error:
void main1() {
auto s = S(4);
with (s) {
mixin T!(x);
f();
}
}
But now, I can get it working by this trick:
import std.stdio;
mixin template T(alias a) {
void f() {
mixin("writeln(" ~ a.stringof ~ ");");
}
}
struct S {
int x;
}
void main() {
auto s = S(4);
with (s) {
mixin T!(x);
f();
}
} // prints 4
So, using string mixins works, but explicit alias to the property
name seems not to. Why is that and is there any other way of
achieving the result witout using template mixins?