Scoped import bug?

Kenji Hara k.hara.pg at gmail.com
Thu May 9 21:58:32 PDT 2013


On Thursday, 9 May 2013 at 18:25:39 UTC, Mike Linford wrote:
> On Thursday, 9 May 2013 at 09:52:12 UTC, Kenji Hara wrote:
>> On Thursday, 9 May 2013 at 05:01:15 UTC, Mike Linford wrote:
>>> I'm not sure whether or not I've encountered a bug or whether 
>>> my understanding of scoped imports is just faulty.
>>>
>>> blah.d:
>>>
>>> 1 module blah;
>>> 2
>>> 3 version(A)
>>> 4 {
>>> 5    import std.range;
>>> 6 }
>>> 7
>>> 8 struct Blah(R)
>>> 9 {
>>> 10    version(B)
>>> 11    {
>>> 12       import std.range;
>>> 13    }
>>> 14    static assert(isInputRange!R);
>>> 15
>>> 16    void blah(R r)
>>> 17    {
>>> 18       version(C)
>>> 19       {
>>> 20          assert(r.front == 'h');
>>> 21       }
>>> 22    }
>>> 23 }
>>> 24
>>> 25 void main()
>>> 26 {
>>> 27    Blah!string blah;
>>> 28    blah.blah("hello");
>>> 29 }
>>>
>>> Results:
>>> rdmd -version=A -version=C blah
>>> Compiles fine. Module-level import works for the static 
>>> assert on line 14 and the runtime assert on line 20
>>>
>>> rdmd -version=B blah
>>> Compiles fine! Struct-level import works for the static 
>>> assert on line 14
>>>
>>> rdmd -version=B -version=C blah
>>> Fails to compile. I get the following error messages:
>>> blah.d(20): Error: no property 'front' for type 'string'
>>> blah.d(27): Error: template instance blah.Blah!(string) error 
>>> instantiating
>>>
>>> So it appears that when my import is at the struct level like 
>>> line 12 I'm able to use the static assert but *not* the 
>>> runtime assert. Why cant the function Blah.blah() find the 
>>> array implementation of front?
>>
>> This is a known UFCS name look-up issue.
>> In 2.063dev, the bug is fixed. Please wait the release.
>>
>> Kenji Hara
>
> Thank you for the explanation. Was this the issue? 
> http://d.puremagic.com/issues/show_bug.cgi?id=6185

Yes, that's right!

Kenji Hara


More information about the Digitalmars-d-learn mailing list