$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r83505 - in trunk: boost/iostreams libs/iostreams/test
From: steven_at_[hidden]
Date: 2013-03-20 11:45:42
Author: steven_watanabe
Date: 2013-03-20 11:45:41 EDT (Wed, 20 Mar 2013)
New Revision: 83505
URL: http://svn.boost.org/trac/boost/changeset/83505
Log:
Make tee work correctly for std::streams.  Fixes #8315.
Text files modified: 
   trunk/boost/iostreams/tee.hpp          |    16 +++++++++++                             
   trunk/libs/iostreams/test/tee_test.cpp |    56 ++++++++++++++++++++++++++++++++++++++++
   2 files changed, 72 insertions(+), 0 deletions(-)
Modified: trunk/boost/iostreams/tee.hpp
==============================================================================
--- trunk/boost/iostreams/tee.hpp	(original)
+++ trunk/boost/iostreams/tee.hpp	2013-03-20 11:45:41 EDT (Wed, 20 Mar 2013)
@@ -204,10 +204,26 @@
 };
 
 template<typename Sink>
+tee_filter<Sink> tee(Sink& snk) 
+{ return tee_filter<Sink>(snk); }
+
+template<typename Sink>
 tee_filter<Sink> tee(const Sink& snk) 
 { return tee_filter<Sink>(snk); }
 
 template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(Device& dev, Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(const Device& dev, Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
+tee_device<Device, Sink> tee(Device& dev, const Sink& sink) 
+{ return tee_device<Device, Sink>(dev, sink); }
+
+template<typename Device, typename Sink>
 tee_device<Device, Sink> tee(const Device& dev, const Sink& sink) 
 { return tee_device<Device, Sink>(dev, sink); }
 
Modified: trunk/libs/iostreams/test/tee_test.cpp
==============================================================================
--- trunk/libs/iostreams/test/tee_test.cpp	(original)
+++ trunk/libs/iostreams/test/tee_test.cpp	2013-03-20 11:45:41 EDT (Wed, 20 Mar 2013)
@@ -240,6 +240,62 @@
     }
 }
 
+void test_std_io()
+{
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name(), out_mode);
+        out.push(tee(stream1));
+        out.push(file_sink(dest2.name(), out_mode));
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name(), out_mode);
+        out.push( tee ( stream1,
+                        file_sink(dest2.name(), out_mode) ) );
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream2(dest2.name(), out_mode);
+        out.push( tee ( file_sink(dest1.name(), out_mode),
+                        stream2 ) );
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+    {
+        temp_file          dest1;
+        temp_file          dest2;
+        filtering_ostream  out;
+        std::ofstream      stream1(dest1.name(), out_mode);
+        std::ofstream      stream2(dest2.name(), out_mode);
+        out.push(tee(stream1, stream2));
+        write_data_in_chunks(out);
+        BOOST_CHECK_MESSAGE(
+            compare_files(dest1.name(), dest2.name()),
+            "failed writing to a tee_device in chunks"
+        );
+    }
+}
+
 void tee_composite_test()
 {
     // This test is probably redundant, given the above test and the tests in