Scoped import bug?

Mike Linford mike.linford at gmail.com
Wed May 8 22:01:11 PDT 2013


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?


More information about the Digitalmars-d-learn mailing list