www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - possible mixin template bug?

reply "growler" <growlercab gmail.com> writes:
This compiles and runs but I think it is a bug.
---
import std.stdio;
mixin template TestMixin(T) {
     int testMixin;
}
struct Test {
     int testMixin;
     mixin TestMixin!Test;
}
void main() {
     Test t;
     t.testMixin = 10;
     writefln("%s", t);
}
---
$ ./hack
Test(10, 0)

I can also change the struct to be:
---
struct Test {
    string testMixin;
    mixin TestMixin!Test;
}
// and the assignment in main() to
t.testMixin = "some string";
---
$ ./hack
Test("some string", 0)

so whether this is a bug or not, I think it is bad. Any thoughts?

G.
Sep 23 2013
parent reply Kenji Hara <k.hara.pg gmail.com> writes:
The symbols that are introduced by mixin template never override/conflict
with the formally defined symbols.
It's a designed behavior.

Kenji Hara


2013/9/23 growler <growlercab gmail.com>

 This compiles and runs but I think it is a bug.
 ---
 import std.stdio;
 mixin template TestMixin(T) {
     int testMixin;
 }
 struct Test {
     int testMixin;
     mixin TestMixin!Test;
 }
 void main() {
     Test t;
     t.testMixin = 10;
     writefln("%s", t);
 }
 ---
 $ ./hack
 Test(10, 0)

 I can also change the struct to be:
 ---
 struct Test {
    string testMixin;
    mixin TestMixin!Test;
 }
 // and the assignment in main() to
 t.testMixin = "some string";
 ---
 $ ./hack
 Test("some string", 0)

 so whether this is a bug or not, I think it is bad. Any thoughts?

 G.
Sep 23 2013
parent "growler" <growlercab gmail.com> writes:
On Monday, 23 September 2013 at 12:08:37 UTC, Kenji Hara wrote:
 The symbols that are introduced by mixin template never 
 override/conflict
 with the formally defined symbols.
 It's a designed behavior.

 Kenji Hara
Thanks Kenji for the information. I guess I'd better go back and read the docs again...and scurry off back to D.learn :D G.
Sep 23 2013