Hello all, in the following little program: using namespace boost::archive; int main () { std::wostringstream lOSS; lOSS << __FUNCTION__; return 0; } for the operator<<() statement is called the following operator<<() (in file boost_1_34_1\libs\serialization\src\xml_woarchive.cpp): std::wostream & operator<<(std::wostream &os, const char *t) . Instead I expected that it would be called the one defined in "ostream" file, i.e. basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL operator<<( basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val) . Notice that the fault is of the "using namespace boost::archive;" directive: in fact when it is removed it happens what I expected. Why does this happen? Is it forbidden to use "using namespace boost::archive;" in application's code? The problem with calling the wrong operator<<() with a string is that the implementation in the boost::archive namespace ends up in an infinite loop as it does: std::wostream & operator<<(std::wostream &os, const char *t){ for(;;){ wchar_t wc; int result = std::mbtowc(&wc, t, 10 /* max number */); if(0 < result) os.put(wc); else if(0 == result) break; else boost::throw_exception( iterators::dataflow_exception( iterators::dataflow_exception::invalid_conversion ) ); } return os; } Thanks in advance, Luca