D言語でファイルや標準入力の終了を調べようとして

std.stream の eof を使ってみたら、ファイルの時と標準入力の時で挙動が違うのね。
ファイルの場合は、ファイルの最後まで読むと、その後を読もうとしなくても eof は true を返すけど、標準入力のようにシーク不可能な場合は、ファイル終端の先を読もうとしないと true を返さない。両方に対応するには「シーク可能かどうか調べる」「eof を使わない」のどちらがおすすめなのだろう。