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