static import std.signals - what's wrong?

Chris Nicholson-Sauls ibisbasenji at gmail.com
Fri Dec 1 14:22:16 PST 2006


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



More information about the Digitalmars-d mailing list