Scoped import bug?
Mike Linford
mike.linford at gmail.com
Thu May 9 11:25:38 PDT 2013
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
More information about the Digitalmars-d-learn
mailing list