<div dir="ltr">Thanks! your solution is more robust (minus some caveats i mentioned) and also trivially extends to variadics. </div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Mar 11, 2014 at 2:07 PM, monarch_dodra <span dir="ltr"><<a href="mailto:monarchdodra@gmail.com" target="_blank">monarchdodra@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On Tuesday, 11 March 2014 at 05:37:25 UTC, Timothee Cour wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
void writelnIfNotEmpty(T)(T a){<br>
auto file_pos=get_filepos(stdin);<br>
write(a);<br>
if(get_filepos(stdin)!=file_<u></u>pos)<br>
writeln;<br>
}<br>
</blockquote>
<br></div>
You could simply create an sink that forwards to stdout, while keeping state:<br>
<br>
//----<br>
import std.stdio, std.format;<br>
<br>
bool writelnIfNotEmpty(T)(T a)<br>
{<br>
    bool written = false;<br>
    void checkWriter(in char[] s)<br>
    {<br>
        if (s.length)<br>
        {<br>
            written = true;<br>
            write(s);<br>
        }<br>
    }<br>
    formattedWrite(&checkWriter, "%s", a);<br>
    if (written)<br>
    {<br>
        writeln();<br>
        return true;<br>
    }<br>
    return false;<br>
}<br>
<br>
void main()<br>
{<br>
    writelnIfNotEmpty(1);<br>
    writelnIfNotEmpty("");<br>
    writelnIfNotEmpty(2);<br>
}<br>
//----<br>
<br>
This prints:<br>
//----<br>
1<br>
2<br>
//----<br>
<br>
Also, this didn't work up until a few releases ago. I am really really happy to see code like this finally "just work". yay!<br>
</blockquote></div><br></div>