Interaction between std.stdio and std.stream...

Simen Kjaeraas simen.kjaras at gmail.com
Sun Oct 14 01:38:54 PDT 2012


On 2012-49-12 18:10, Peter Arnt <peter_arnt at yahoo.com> wrote:

> I don't know if this has been seen before, but here goes:
> There appears to be an interaction between std.stdio and std.stream such  
> that an error is generated when a File object is created.  Here is a  
> simplified example of what I've been experiencing:
>
>    1 import std.stdio;
>    2 import std.stream;
>    3
>    4 void main()
>    5 {
>    6     auto f = File( "foo.bar", "w" );
>    7 }
>
> I have compiled the above on both Ubuntu Linux 64-bit and Windows 64-bit  
> systems and I get a similar error message from DMD.  here is the error:
>
> $ dmd test.d
> test.d(6): Error: std.stdio.File at  
> /usr/include/dmd/phobos/std/stdio.d(258) conflicts with std.stream.File  
> at /usr/include/dmd/phobos/std/stream.d(1820)
>
> $
>
> When I remove the import of std.stream, the compiler runs fine with no  
> errors generated.  Again, this is a simplified example.  My original  
> project utilized features contained in both stdio and stream libraries.
>
> Any help or direction on this would be greatly appreciated.


This is a newsgroup for automatic messages from Bugzilla. For help,
please try digitalmars.D.learn instead.


As for your specific problem, this is not a bug. Both std.stream and
std.stdio define a symbol by that name, and all the better for a
compile-time error to occur than it randomly choose one of them.

One could argue this should be en enhancement.

The solution to your problem is to specify which File you intend
to use:


import std.stdio : File; // Either here (will not import other symbols)
import std.stream;

alias std.stdio.File File; // Or here.

void main( ) {
     auto f = std.stdio.File( "foo.bar", "w" ); // Or here.
}



-- 
Simen


More information about the Digitalmars-d-bugs mailing list