Our template emission strategy is broken

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Thu Nov 12 20:36:23 PST 2015


On Friday, 13 November 2015 at 04:03:23 UTC, Walter Bright wrote:
> On 11/12/2015 5:14 PM, deadalnix wrote:
>> module a;
>>
>> struct S(E) {
>>      import std.bitfield;
>>      mixin(bitfield!(
>>          bool, "flag", 1,
>>          T, "myT", SizeOf!T,
>>          uint, "", 32 - SizeOf!T - 1,
>>      ));
>> }
>>
>> module b;
>>
>> enum MyEnum { Val1, Val2, Val3 }
>>
>> import a;
>> alias UsefulStruct = S!MyEnum; // Boom, MyEnum is undefined
>>
>> Now you end up having to tie stupid node into your code, like 
>> adding all user of
>> library X as import in library X. Which sucks, but is forced 
>> by the language
>> design.
>>
>
> The trouble there is that E is turned into MyEnum in the mixin 
> string, and MyEnum would be unknown to module a.
>
> You can file an enhancement request on this in bugzilla if you 
> like.

I know what the problem is. Hence you need to import a in b and b 
in a. There is not really anyway around this because this is 
intrinsically how mixin works.


More information about the Digitalmars-d mailing list