static import std.signals - what's wrong?
Chris Nicholson-Sauls
ibisbasenji at gmail.com
Fri Dec 1 19:42:46 PST 2006
Hasan Aljudy wrote:
>
>
> 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;
As long as the code that is barfing on symbols with the static import scenario doesn't
itself make any referance to std.signal.Signal it should work fine... but admittedly, I
haven't tested this myself...
-- Chris Nicholson-Sauls
More information about the Digitalmars-d
mailing list