close on Filter

close はストリームが終端に到達したこと(End Of Stream, EOS)を notify するために呼ばれる.
Filter は Device の lifetime をコントロールしないし,させるべきではない. Filter の lifetime と Device の lifetime は独立であるべきで,これが有用となる場合も十分考えられる.例えば,単一 Device からのストリームに対して複数の Filter を部分的にかませるような事例,あるいは 複数の Device からのストリームを単一ストリームとみなして,そのストリーム上で(ストリームが切り替わる前後で状態を継続して)動作する Filter とか.
したがって, Filter に対する close は the underlying device に伝播させるべきではないよ〜な気がする.少なくとも Boost.Iostreams では伝播させない設計になってる. Device と Filter の composite になって初めて,(Device と Filter の lifetime が一致するので) composite に対する close が Filter, Device 双方に伝播している(当然 in 方向の場合 Device -> Filter の順で, out 方向の場合 Filter -> Device の順で close).