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