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