static import std.signals - what's wrong?

Hasan Aljudy hasan.aljudy at gmail.com
Fri Dec 1 16:42:55 PST 2006



Chris Nicholson-Sauls wrote:
> Hasan Aljudy wrote:
>>
>>
>> Vladimir Bezhenar wrote:
>>> Code:
>>> static import std.signals;
>>>
>>> class A {
>>>     mixin std.signals.Signal!();
>>> }
>>>
>>> When I try to compile it, there is a lot of confusing messages about 
>>> errors in
>>> std/signals.d
>>> If I remove "static" from the first line, all works ok.
>>
>> I don't know if Walter would call that "a bug"; it's consistent with 
>> the specs but IMHO it's a bug. (If it's caused by what I think it is ..)
>>
>> you're instantiating that template in this file, so the declarations 
>> in that template are "copied over" to your file, i.e. the scope where 
>> the mixin happens; but these declaration have dependencies, and these 
>> dependencies are not available in your file because your import is 
>> static.
>>
>> I'm not sure if that makes any sense at all.
>>
>> example:
>> a.d:
>> ----------
>> struct A { .. }
>>
>> template M()
>> {
>>    A a; //this declaration depends on the declaration of struct A
>> }
>>
>> ----------
>>
>> b.d:
>> ---------
>> static import a;
>>
>> mixin a.M!(); //problem, struct A cannot be found from this scope 
>> (because the import is static)
>> ------------
> 
> I'm sure you are most likely correct that this is the problem he was 
> experiencing.  In fact, I think I suggested before that the imports 
> within std.signals should themselves most likely be static.  Would've 
> prevented this problem, especially if they were public static.  :)
> 
> -- Chris Nicholson-Sauls

But I think that wouldn't work if someone was to do something like:

import sslot = std.signal : Sig = Signal;



More information about the Digitalmars-d mailing list