summaryrefslogtreecommitdiff
path: root/boost/archive/impl/basic_text_oprimitive.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/archive/impl/basic_text_oprimitive.ipp')
-rw-r--r--boost/archive/impl/basic_text_oprimitive.ipp32
1 files changed, 17 insertions, 15 deletions
diff --git a/boost/archive/impl/basic_text_oprimitive.ipp b/boost/archive/impl/basic_text_oprimitive.ipp
index f2b0a10a60..6030fd44c5 100644
--- a/boost/archive/impl/basic_text_oprimitive.ipp
+++ b/boost/archive/impl/basic_text_oprimitive.ipp
@@ -10,10 +10,15 @@
#include <cstddef> // NULL
#include <algorithm> // std::copy
+#include <exception> // std::uncaught_exception
+#include <boost/config.hpp>
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{
+ using ::size_t;
+} // namespace std
+#endif
#include <boost/archive/basic_text_oprimitive.hpp>
-#include <boost/archive/codecvt_null.hpp>
-#include <boost/archive/add_facet.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/insert_linebreaks.hpp>
@@ -79,33 +84,30 @@ basic_text_oprimitive<OStream>::basic_text_oprimitive(
OStream & os_,
bool no_codecvt
) :
-#ifndef BOOST_NO_STD_LOCALE
os(os_),
flags_saver(os_),
precision_saver(os_),
- locale_saver(* os_.rdbuf())
+#ifndef BOOST_NO_STD_LOCALE
+ codecvt_null_facet(1),
+ archive_locale(os.getloc(), & codecvt_null_facet),
+ locale_saver(os)
{
if(! no_codecvt){
- archive_locale.reset(
- add_facet(
- std::locale::classic(),
- new boost::archive::codecvt_null<typename OStream::char_type>
- )
- );
- //os.imbue(* archive_locale);
+ os_.flush();
+ os_.imbue(archive_locale);
}
- os << std::noboolalpha;
+ os_ << std::noboolalpha;
}
#else
- os(os_),
- flags_saver(os_),
- precision_saver(os_)
{}
#endif
+
template<class OStream>
BOOST_ARCHIVE_OR_WARCHIVE_DECL
basic_text_oprimitive<OStream>::~basic_text_oprimitive(){
+ if(std::uncaught_exception())
+ return;
os << std::endl;
}