Mixin and introspection ordering

Sebastiaan Koppe mail at skoppe.eu
Wed Oct 16 10:09:51 UTC 2019


On Tuesday, 15 October 2019 at 19:50:33 UTC, Paul Backus wrote:
> On Tuesday, 15 October 2019 at 19:19:58 UTC, Sebastiaan Koppe 
> wrote:
>> You would expect 2 to print `tuple(a)` as well, but it 
>> doesn't. Don't know if it is a bug.
>
> Any time you use a construct that mutates the AST (template 
> mixin, string mixin, static if, static foreach), it's possible 
> to catch it in both "before" and "after" states. For example:
>
> This can cause some "interesting" things to happen when using 
> templates like the ones in std.traits to do reflection, since 
> the result of template instantiation is cached:

Wth the simple examples in this thread it can even be excused. 
However, when the mixin and the introspection are part of 
something larger it is no longer easily apparent.

I myself spend 30min wondering why it didn't work. And I wrote it 
myself.

Do we want to be able to catch things in their 'before' state? Or 
is it a bug?


More information about the Digitalmars-d-learn mailing list