| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
September 09, 2012 inconsistent behavior with implicit imports | ||||
|---|---|---|---|---|
| ||||
This works:
----
import std.stdio;
void main(){
writeln(std.conv.to!double(1));
}
----
This doesn't compile:
----
import std.stdio;
void main(){
std.stdio.writeln(std.conv.to!double(1));
}
----
=>Error: undefined identifier std
So it seems for conv, import std.conv is not needed, but for writeln, import std.stdio is needed. Why?
Also, I always get link errors when using those "implicit imports" for my own modules and using "rdmd". Is there a way to allow this without link errors in the following (using rdmd) ?
----
void main(){
mypackage.mymodule.myfun(0);
}
----
which would behave as:
----
import mypackage.mymodule;
void main(){
myfun(0);
}
----
| ||||
September 10, 2012 Re: inconsistent behavior with implicit imports | ||||
|---|---|---|---|---|
| ||||
Posted in reply to timotheecour | On Monday, September 10, 2012 01:47:35 timotheecour wrote:
> This works:
> ----
> import std.stdio;
> void main(){
> writeln(std.conv.to!double(1));
> }
> ----
>
> This doesn't compile:
> ----
> import std.stdio;
> void main(){
> std.stdio.writeln(std.conv.to!double(1));
> }
> ----
> =>Error: undefined identifier std
>
> So it seems for conv, import std.conv is not needed, but for writeln, import std.stdio is needed. Why?
>
> Also, I always get link errors when using those "implicit imports" for my own modules and using "rdmd". Is there a way to allow this without link errors in the following (using rdmd) ?
> ----
> void main(){
> mypackage.mymodule.myfun(0);
> }
> ----
> which would behave as:
> ----
> import mypackage.mymodule;
> void main(){
> myfun(0);
> }
> ----
Any and all implicit imports are a _bug_. They should _never_ happen. You should have to import both std.stdio and std.conv. If you don't have to, then you've found a bug. The _only_ exception is when one module publicly imports another, which Phobos _does_ do in a few places, but it definitely doesn't do that here. Nether of your examples should compile.
- Jonathan M Davis
| |||
September 10, 2012 Re: inconsistent behavior with implicit imports | ||||
|---|---|---|---|---|
| ||||
Posted in reply to timotheecour | On 09/10/2012 01:47 AM, timotheecour wrote: > This works: > ---- > import std.stdio; > void main(){ > writeln(std.conv.to!double(1)); > } > ---- > > This doesn't compile: > ---- > import std.stdio; > void main(){ > std.stdio.writeln(std.conv.to!double(1)); > } > ---- > =>Error: undefined identifier std > > So it seems for conv, import std.conv is not needed, but for writeln, > import std.stdio is needed. Why? > I assume because std.stdio imports std.conv, but not vice versa. > Also, I always get link errors when using those "implicit imports" for > my own modules and using "rdmd". Is there a way to allow this without > link errors in the following (using rdmd) ? > ---- > void main(){ > mypackage.mymodule.myfun(0); > } > ---- > which would behave as: > ---- > import mypackage.mymodule; > void main(){ > myfun(0); > } > ---- > This is a quirk of DMD, not a language feature. You can file the implicit import behaviour as a bug. | |||
September 10, 2012 Re: inconsistent behavior with implicit imports | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | > This is a quirk of DMD, not a language feature. > You can file the implicit import behaviour as a bug. done: http://d.puremagic.com/issues/show_bug.cgi?id=8636 | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply