Strange template alias behaviour

Simen Kjaeraas simen.kjaras at gmail.com
Sun Nov 18 13:38:30 PST 2012


On 2012-05-18 17:11, Maxim Fomin <maxim at maxim-fomin.ru> wrote:

> Changing template parameter to Bar.f or bar.f affects value of  
> bar.f.data. Seems to be a bug.

It's a bug. Further reduction:

import std.stdio;

mixin template Foo() {
   string data = "default";
}

struct Bar {
   mixin Foo f;
}

string get_data(alias unused, T)(T obj) {
     return obj.f.data;
}

void main() {
   Bar bar = Bar("");

   writeln(get_data!Bar(bar));
   writeln(get_data!(Bar.f)(bar)); // This line fucks things up.
   assert( get_data!Bar(bar) == get_data!(Bar.f)(bar) );
}

Note also that moving the marked line above the line before it
makes the assert pass. However, the writelns will both print the
wrong value ("default").

-- 
Simen


More information about the Digitalmars-d-learn mailing list