On Tuesday, November 07, 2017 04:34:30 Tony via Digitalmars-d-learn wrote: > There is a fputs/stdout in core.stdc.stdio. std.stdio "public > imports" that: > > "public import core.stdc.stdio;" > > Wondering why: > > import core.stdc.stdio : fputs; > import core.stdc.stdio : stdout; > > void main() > { > fputs( cast(const char *)"hello world\n",stdout); > } > > compiles and runs, but if I change the imports to: > > import std.stdio : fputs; > import std.stdio : stdout; > > I get this compile error: > > fputs_test.d(11): Error: function core.stdc.stdio.fputs (scope > const(char*) s, shared(_IO_FILE)* stream) is not callable using > argument types (const(char*), File)
stdout in core.stdc.stdio and stdout in std.stdio are two different things. In core.stdc.stdio it's a FILE*, and in std.stdio it's std.stdio.File. Basically, core.stdc.stdio gives you the C version, and std.stdio gives you the D version. However, there is no fputs in std.stdio. Rather, std.stdio publicly imports core.stdc.stdio. So, it's the same fputs in core.stdc.stdio, and it expects a FILE*, whereas since you import stdout from std.stdio, you got the File, not the FILE*. So, they're not compatible. - Jonathan M Davis