digitalmars.D - Compiler bug? Mixin behavior order dependent
- Norbert Nemec (31/31) Oct 16 2011 Hi there,
- Trass3r (2/2) Oct 16 2011 Well it's probably a bug if type is recognized but not rank.
- Norbert Nemec (4/6) Oct 16 2011 True, but it is also quite powerful if used with care. After all the
Hi there,
can anyone give an explanation for the following or is it simply a
compiler bug?
The code below does not compile. I don't see why the enum cannot be
forward referenced across mixin boundaries while the other two forward
references are no problem. (Ordering the mixing statement below the enum
definition also solves the problem)
=====================
mixin template verifyArray() {
static assert(is(type)); // no problem
static assert(rank >= 0); // Error: forward reference
}
struct MyArray(T,int R) {
mixin verifyArray;
static assert(rank >= 0); // no problem
alias T type;
enum rank = R;
}
unittest {
MyArray!(int,4) x;
}
=====================
./bug_mixin_order.d(5): Error: forward reference of variable rank
./bug_mixin_order.d(9): Error: mixin
MyArray(int,4).MyArray.verifyArray!() error instantiating
./bug_mixin_order.d(16): Error: template instance MyArray!(int,4) error
instantiating
=====================
Any ideas?
Greetings,
Norbert
Oct 16 2011
Well it's probably a bug if type is recognized but not rank. But in general it's really bad code style to use external stuff in a mixin.
Oct 16 2011
On 16.10.2011 18:49, Trass3r wrote:Well it's probably a bug if type is recognized but not rank. But in general it's really bad code style to use external stuff in a mixin.True, but it is also quite powerful if used with care. After all the whole point of "mixin template" is to be able to access the surrounding namespace.
Oct 16 2011








Norbert Nemec <Norbert Nemec-online.de>