What happens if you just call "std_stdio_static_this" the first you do in your main function?
In my case I can't: I don't have control over the main function (it could be written in C for example).
@property File stdin () { if (!_stdin.p) _stdin.p = &stdinImpl; return _stdin; }
I guess you also want to add inside the if(): "stdinImpl.handle = core.stdc.stdio.stdin;", etc.
The same for "stdout" and "stderr". But this may not be good for performance reasons. I don't know how good the compiler is at optimizing these kind of functions.
I doubt the compiler can do much optimizing here, since the if won't always be true, but probably IO is slow enough compared to a branch so it might not matter.
That being said, templatizing std_stdio_static_this as above would avoid branching at every single call to writeXX functions. Would there be any disadvantage?
Also, I grepped for static_this, it appears this hack is only used in 2 places:
* std.stdio (=>stdiobase) * std.process (=>processinit) So the same template trick could be used in those 2 places.