diff --git a/include/boost/archive/basic_text_iprimitive.hpp b/include/boost/archive/basic_text_iprimitive.hpp index 606f59f58..50c66f5d4 100644 --- a/include/boost/archive/basic_text_iprimitive.hpp +++ b/include/boost/archive/basic_text_iprimitive.hpp @@ -26,6 +26,7 @@ #include #include // size_t +#include // snprintf #include #if defined(BOOST_NO_STDC_NAMESPACE) @@ -86,11 +87,17 @@ class BOOST_SYMBOL_VISIBLE basic_text_iprimitive { template void load(T & t) { + auto pos = is.tellg(); if(is >> t) return; + char at_offset[64] = "at offset "; + if (std::streampos(-1) == pos) + snprintf&at_offset[10], 54, "%s", ""); + else + snprintf(&at_offset[10], 54, "%d", static_cast(pos)); boost::serialization::throw_exception( - archive_exception(archive_exception::input_stream_error) - ); + archive_exception(archive_exception::input_stream_error, at_offset) + ); } void load(char & t)