13e519524SHoward Hinnant// -*- C++ -*- 2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===// 33e519524SHoward Hinnant// 457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information. 657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 73e519524SHoward Hinnant// 83e519524SHoward Hinnant//===----------------------------------------------------------------------===// 93e519524SHoward Hinnant 103e519524SHoward Hinnant#ifndef _LIBCPP_OSTREAM 113e519524SHoward Hinnant#define _LIBCPP_OSTREAM 123e519524SHoward Hinnant 133e519524SHoward Hinnant/* 143e519524SHoward Hinnant ostream synopsis 153e519524SHoward Hinnant 163e519524SHoward Hinnanttemplate <class charT, class traits = char_traits<charT> > 173e519524SHoward Hinnantclass basic_ostream 183e519524SHoward Hinnant : virtual public basic_ios<charT,traits> 193e519524SHoward Hinnant{ 203e519524SHoward Hinnantpublic: 213e519524SHoward Hinnant // types (inherited from basic_ios (27.5.4)): 223e519524SHoward Hinnant typedef charT char_type; 233e519524SHoward Hinnant typedef traits traits_type; 243e519524SHoward Hinnant typedef typename traits_type::int_type int_type; 253e519524SHoward Hinnant typedef typename traits_type::pos_type pos_type; 263e519524SHoward Hinnant typedef typename traits_type::off_type off_type; 273e519524SHoward Hinnant 283e519524SHoward Hinnant // 27.7.2.2 Constructor/destructor: 293e519524SHoward Hinnant explicit basic_ostream(basic_streambuf<char_type,traits>* sb); 303e519524SHoward Hinnant basic_ostream(basic_ostream&& rhs); 313e519524SHoward Hinnant virtual ~basic_ostream(); 323e519524SHoward Hinnant 333e519524SHoward Hinnant // 27.7.2.3 Assign/swap 34ede1aa2dSMarshall Clow basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14 353e519524SHoward Hinnant basic_ostream& operator=(basic_ostream&& rhs); 363e519524SHoward Hinnant void swap(basic_ostream& rhs); 373e519524SHoward Hinnant 383e519524SHoward Hinnant // 27.7.2.4 Prefix/suffix: 393e519524SHoward Hinnant class sentry; 403e519524SHoward Hinnant 413e519524SHoward Hinnant // 27.7.2.6 Formatted output: 423e519524SHoward Hinnant basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&)); 433e519524SHoward Hinnant basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&)); 443e519524SHoward Hinnant basic_ostream& operator<<(ios_base& (*pf)(ios_base&)); 453e519524SHoward Hinnant basic_ostream& operator<<(bool n); 463e519524SHoward Hinnant basic_ostream& operator<<(short n); 473e519524SHoward Hinnant basic_ostream& operator<<(unsigned short n); 483e519524SHoward Hinnant basic_ostream& operator<<(int n); 493e519524SHoward Hinnant basic_ostream& operator<<(unsigned int n); 503e519524SHoward Hinnant basic_ostream& operator<<(long n); 513e519524SHoward Hinnant basic_ostream& operator<<(unsigned long n); 523e519524SHoward Hinnant basic_ostream& operator<<(long long n); 533e519524SHoward Hinnant basic_ostream& operator<<(unsigned long long n); 543e519524SHoward Hinnant basic_ostream& operator<<(float f); 553e519524SHoward Hinnant basic_ostream& operator<<(double f); 563e519524SHoward Hinnant basic_ostream& operator<<(long double f); 573e519524SHoward Hinnant basic_ostream& operator<<(const void* p); 58f0d5a60fSNikolas Klauser basic_ostream& operator<<(const volatile void* val); // C++23 593e519524SHoward Hinnant basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb); 603c125fe8SMarshall Clow basic_ostream& operator<<(nullptr_t); 613e519524SHoward Hinnant 623e519524SHoward Hinnant // 27.7.2.7 Unformatted output: 633e519524SHoward Hinnant basic_ostream& put(char_type c); 643e519524SHoward Hinnant basic_ostream& write(const char_type* s, streamsize n); 653e519524SHoward Hinnant basic_ostream& flush(); 663e519524SHoward Hinnant 673e519524SHoward Hinnant // 27.7.2.5 seeks: 683e519524SHoward Hinnant pos_type tellp(); 693e519524SHoward Hinnant basic_ostream& seekp(pos_type); 703e519524SHoward Hinnant basic_ostream& seekp(off_type, ios_base::seekdir); 71f45b237cSMarshall Clowprotected: 72f45b237cSMarshall Clow basic_ostream(const basic_ostream& rhs) = delete; 73f45b237cSMarshall Clow basic_ostream(basic_ostream&& rhs); 74f45b237cSMarshall Clow // 27.7.3.3 Assign/swap 75f45b237cSMarshall Clow basic_ostream& operator=(basic_ostream& rhs) = delete; 76f45b237cSMarshall Clow basic_ostream& operator=(const basic_ostream&& rhs); 77f45b237cSMarshall Clow void swap(basic_ostream& rhs); 783e519524SHoward Hinnant}; 793e519524SHoward Hinnant 803e519524SHoward Hinnant// 27.7.2.6.4 character inserters 813e519524SHoward Hinnant 823e519524SHoward Hinnanttemplate<class charT, class traits> 833e519524SHoward Hinnant basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT); 843e519524SHoward Hinnant 853e519524SHoward Hinnanttemplate<class charT, class traits> 863e519524SHoward Hinnant basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char); 873e519524SHoward Hinnant 883e519524SHoward Hinnanttemplate<class traits> 893e519524SHoward Hinnant basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char); 903e519524SHoward Hinnant 913e519524SHoward Hinnant// signed and unsigned 923e519524SHoward Hinnant 933e519524SHoward Hinnanttemplate<class traits> 943e519524SHoward Hinnant basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char); 953e519524SHoward Hinnant 963e519524SHoward Hinnanttemplate<class traits> 973e519524SHoward Hinnant basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char); 983e519524SHoward Hinnant 993e519524SHoward Hinnant// NTBS 1003e519524SHoward Hinnanttemplate<class charT, class traits> 1013e519524SHoward Hinnant basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*); 1023e519524SHoward Hinnant 1033e519524SHoward Hinnanttemplate<class charT, class traits> 1043e519524SHoward Hinnant basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*); 1053e519524SHoward Hinnant 1063e519524SHoward Hinnanttemplate<class traits> 1073e519524SHoward Hinnant basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*); 1083e519524SHoward Hinnant 1093e519524SHoward Hinnant// signed and unsigned 1103e519524SHoward Hinnanttemplate<class traits> 1113e519524SHoward Hinnantbasic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*); 1123e519524SHoward Hinnant 1133e519524SHoward Hinnanttemplate<class traits> 1143e519524SHoward Hinnant basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*); 1153e519524SHoward Hinnant 1163e519524SHoward Hinnant// swap: 1173e519524SHoward Hinnanttemplate <class charT, class traits> 1183e519524SHoward Hinnant void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y); 1193e519524SHoward Hinnant 1203e519524SHoward Hinnanttemplate <class charT, class traits> 1213e519524SHoward Hinnant basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os); 1223e519524SHoward Hinnant 1233e519524SHoward Hinnanttemplate <class charT, class traits> 1243e519524SHoward Hinnant basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os); 1253e519524SHoward Hinnant 1263e519524SHoward Hinnanttemplate <class charT, class traits> 1273e519524SHoward Hinnant basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os); 1283e519524SHoward Hinnant 1293e519524SHoward Hinnant// rvalue stream insertion 130c90dee1eSLouis Dionnetemplate <class Stream, class T> 131c90dee1eSLouis Dionne Stream&& operator<<(Stream&& os, const T& x); 1323e519524SHoward Hinnant 133*309aed30SNikolas Klausertemplate<class traits> 134*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete; // since C++20 135*309aed30SNikolas Klausertemplate<class traits> 136*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete; // since C++20 137*309aed30SNikolas Klausertemplate<class traits> 138*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete; // since C++20 139*309aed30SNikolas Klausertemplate<class traits> 140*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete; // since C++20 141*309aed30SNikolas Klausertemplate<class traits> 142*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete; // since C++20 143*309aed30SNikolas Klausertemplate<class traits> 144*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete; // since C++20 145*309aed30SNikolas Klausertemplate<class traits> 146*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete; // since C++20 147*309aed30SNikolas Klausertemplate<class traits> 148*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete; // since C++20 149*309aed30SNikolas Klausertemplate<class traits> 150*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete; // since C++20 151*309aed30SNikolas Klausertemplate<class traits> 152*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete; // since C++20 153*309aed30SNikolas Klausertemplate<class traits> 154*309aed30SNikolas Klauserbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete; // since C++20 155*309aed30SNikolas Klausertemplate<class traits> 156*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete; // since C++20 157*309aed30SNikolas Klausertemplate<class traits> 158*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20 159*309aed30SNikolas Klausertemplate<class traits> 160*309aed30SNikolas Klauserbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20 161*309aed30SNikolas Klauser 1623e519524SHoward Hinnant} // std 1633e519524SHoward Hinnant 1643e519524SHoward Hinnant*/ 1653e519524SHoward Hinnant 166385cc25aSLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler 1673e519524SHoward Hinnant#include <__config> 1683e519524SHoward Hinnant#include <bitset> 169bfbd73f8SArthur O'Dwyer#include <ios> 170bfbd73f8SArthur O'Dwyer#include <locale> 171bfbd73f8SArthur O'Dwyer#include <streambuf> 1727dad0bd6SMarshall Clow#include <version> 1733e519524SHoward Hinnant 174de4a57cbSLouis Dionne#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES 175de4a57cbSLouis Dionne# include <iterator> 176de4a57cbSLouis Dionne#endif 177de4a57cbSLouis Dionne 178073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1793e519524SHoward Hinnant# pragma GCC system_header 180073458b1SHoward Hinnant#endif 1813e519524SHoward Hinnant 1823e519524SHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 1833e519524SHoward Hinnant 1843e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 185e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS basic_ostream 1863e519524SHoward Hinnant : virtual public basic_ios<_CharT, _Traits> 1873e519524SHoward Hinnant{ 1883e519524SHoward Hinnantpublic: 1893e519524SHoward Hinnant // types (inherited from basic_ios (27.5.4)): 1903e519524SHoward Hinnant typedef _CharT char_type; 1913e519524SHoward Hinnant typedef _Traits traits_type; 1923e519524SHoward Hinnant typedef typename traits_type::int_type int_type; 1933e519524SHoward Hinnant typedef typename traits_type::pos_type pos_type; 1943e519524SHoward Hinnant typedef typename traits_type::off_type off_type; 1953e519524SHoward Hinnant 1963e519524SHoward Hinnant // 27.7.2.2 Constructor/destructor: 1977833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 198f8f31c49SEric Fiselier explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb) 199f8f31c49SEric Fiselier { this->init(__sb); } 2003e519524SHoward Hinnant virtual ~basic_ostream(); 2013e519524SHoward Hinnantprotected: 202f8f31c49SEric Fiselier inline _LIBCPP_INLINE_VISIBILITY 2033e519524SHoward Hinnant basic_ostream(basic_ostream&& __rhs); 2043e519524SHoward Hinnant 2053e519524SHoward Hinnant // 27.7.2.3 Assign/swap 206f8f31c49SEric Fiselier inline _LIBCPP_INLINE_VISIBILITY 2073e519524SHoward Hinnant basic_ostream& operator=(basic_ostream&& __rhs); 208a8d1182fSArthur O'Dwyer 2097833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 210f8f31c49SEric Fiselier void swap(basic_ostream& __rhs) 211f8f31c49SEric Fiselier { basic_ios<char_type, traits_type>::swap(__rhs); } 212f45b237cSMarshall Clow 21330d0c1abSMarshall Clow basic_ostream (const basic_ostream& __rhs) = delete; 21430d0c1abSMarshall Clow basic_ostream& operator=(const basic_ostream& __rhs) = delete; 2153e519524SHoward Hinnant 216a8d1182fSArthur O'Dwyerpublic: 2173e519524SHoward Hinnant // 27.7.2.4 Prefix/suffix: 218e2f2d1edSEric Fiselier class _LIBCPP_TEMPLATE_VIS sentry; 2193e519524SHoward Hinnant 2203e519524SHoward Hinnant // 27.7.2.6 Formatted output: 2217833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 222f8f31c49SEric Fiselier basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)) 223f8f31c49SEric Fiselier { return __pf(*this); } 224f8f31c49SEric Fiselier 2257833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2263e519524SHoward Hinnant basic_ostream& operator<<(basic_ios<char_type, traits_type>& 227f8f31c49SEric Fiselier (*__pf)(basic_ios<char_type,traits_type>&)) 228f8f31c49SEric Fiselier { __pf(*this); return *this; } 229f8f31c49SEric Fiselier 2307833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 231f8f31c49SEric Fiselier basic_ostream& operator<<(ios_base& (*__pf)(ios_base&)) 232f8f31c49SEric Fiselier { __pf(*this); return *this; } 233f8f31c49SEric Fiselier 2343e519524SHoward Hinnant basic_ostream& operator<<(bool __n); 2353e519524SHoward Hinnant basic_ostream& operator<<(short __n); 2363e519524SHoward Hinnant basic_ostream& operator<<(unsigned short __n); 2373e519524SHoward Hinnant basic_ostream& operator<<(int __n); 2383e519524SHoward Hinnant basic_ostream& operator<<(unsigned int __n); 2393e519524SHoward Hinnant basic_ostream& operator<<(long __n); 2403e519524SHoward Hinnant basic_ostream& operator<<(unsigned long __n); 2413e519524SHoward Hinnant basic_ostream& operator<<(long long __n); 2423e519524SHoward Hinnant basic_ostream& operator<<(unsigned long long __n); 2433e519524SHoward Hinnant basic_ostream& operator<<(float __f); 2443e519524SHoward Hinnant basic_ostream& operator<<(double __f); 2453e519524SHoward Hinnant basic_ostream& operator<<(long double __f); 2463e519524SHoward Hinnant basic_ostream& operator<<(const void* __p); 247f0d5a60fSNikolas Klauser 248f0d5a60fSNikolas Klauser#if _LIBCPP_STD_VER > 20 249f0d5a60fSNikolas Klauser _LIBCPP_HIDE_FROM_ABI 250f0d5a60fSNikolas Klauser basic_ostream& operator<<(const volatile void* __p) { 251f0d5a60fSNikolas Klauser return operator<<(const_cast<const void*>(__p)); 252f0d5a60fSNikolas Klauser } 253f0d5a60fSNikolas Klauser#endif 254f0d5a60fSNikolas Klauser 2553e519524SHoward Hinnant basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb); 2563e519524SHoward Hinnant 25750cfb76eSJoe Loser#if _LIBCPP_STD_VER > 14 25850cfb76eSJoe Loser// LWG 2221 - nullptr. This is not backported to older standards modes. 25950cfb76eSJoe Loser// See https://reviews.llvm.org/D127033 for more info on the rationale. 2603c125fe8SMarshall Clow _LIBCPP_INLINE_VISIBILITY 2613c125fe8SMarshall Clow basic_ostream& operator<<(nullptr_t) 2623c125fe8SMarshall Clow { return *this << "nullptr"; } 26350cfb76eSJoe Loser#endif 2643c125fe8SMarshall Clow 2653e519524SHoward Hinnant // 27.7.2.7 Unformatted output: 2663e519524SHoward Hinnant basic_ostream& put(char_type __c); 2673e519524SHoward Hinnant basic_ostream& write(const char_type* __s, streamsize __n); 2683e519524SHoward Hinnant basic_ostream& flush(); 2693e519524SHoward Hinnant 2703e519524SHoward Hinnant // 27.7.2.5 seeks: 2717833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2723e519524SHoward Hinnant pos_type tellp(); 2737833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2743e519524SHoward Hinnant basic_ostream& seekp(pos_type __pos); 2757833b88aSLouis Dionne inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2763e519524SHoward Hinnant basic_ostream& seekp(off_type __off, ios_base::seekdir __dir); 2773e519524SHoward Hinnant 2783e519524SHoward Hinnantprotected: 279dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 2803e519524SHoward Hinnant basic_ostream() {} // extension, intentially does not initialize 2813e519524SHoward Hinnant}; 2823e519524SHoward Hinnant 2833e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 284e2f2d1edSEric Fiselierclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry 2853e519524SHoward Hinnant{ 2863e519524SHoward Hinnant bool __ok_; 2873e519524SHoward Hinnant basic_ostream<_CharT, _Traits>& __os_; 2883e519524SHoward Hinnant 2893e519524SHoward Hinnantpublic: 2903e519524SHoward Hinnant explicit sentry(basic_ostream<_CharT, _Traits>& __os); 2913e519524SHoward Hinnant ~sentry(); 292feb80aa9SNikolas Klauser sentry(const sentry&) = delete; 293feb80aa9SNikolas Klauser sentry& operator=(const sentry&) = delete; 2943e519524SHoward Hinnant 295dc7200b4SLouis Dionne _LIBCPP_INLINE_VISIBILITY 296317e92a3SArthur O'Dwyer explicit operator bool() const {return __ok_;} 2973e519524SHoward Hinnant}; 2983e519524SHoward Hinnant 2993e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3003e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os) 3013e519524SHoward Hinnant : __ok_(false), 3023e519524SHoward Hinnant __os_(__os) 3033e519524SHoward Hinnant{ 3043e519524SHoward Hinnant if (__os.good()) 3053e519524SHoward Hinnant { 3063e519524SHoward Hinnant if (__os.tie()) 3073e519524SHoward Hinnant __os.tie()->flush(); 3083e519524SHoward Hinnant __ok_ = true; 3093e519524SHoward Hinnant } 3103e519524SHoward Hinnant} 3113e519524SHoward Hinnant 3123e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3133e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::sentry::~sentry() 3143e519524SHoward Hinnant{ 3153e519524SHoward Hinnant if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) 3163e519524SHoward Hinnant && !uncaught_exception()) 3173e519524SHoward Hinnant { 3183e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3193e519524SHoward Hinnant try 3203e519524SHoward Hinnant { 321b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 3223e519524SHoward Hinnant if (__os_.rdbuf()->pubsync() == -1) 3233e519524SHoward Hinnant __os_.setstate(ios_base::badbit); 3243e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3253e519524SHoward Hinnant } 3263e519524SHoward Hinnant catch (...) 3273e519524SHoward Hinnant { 3283e519524SHoward Hinnant } 329b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 3303e519524SHoward Hinnant } 3313e519524SHoward Hinnant} 3323e519524SHoward Hinnant 3333e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3343e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) 3353e519524SHoward Hinnant{ 3363e519524SHoward Hinnant this->move(__rhs); 3373e519524SHoward Hinnant} 3383e519524SHoward Hinnant 3393e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3403e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 3413e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs) 3423e519524SHoward Hinnant{ 3433e519524SHoward Hinnant swap(__rhs); 3443e519524SHoward Hinnant return *this; 3453e519524SHoward Hinnant} 3463e519524SHoward Hinnant 3473e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3483e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::~basic_ostream() 3493e519524SHoward Hinnant{ 3503e519524SHoward Hinnant} 3513e519524SHoward Hinnant 3523e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 3533e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 3543e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb) 3553e519524SHoward Hinnant{ 3563e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3573e519524SHoward Hinnant try 3583e519524SHoward Hinnant { 359b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 3603e519524SHoward Hinnant sentry __s(*this); 3613e519524SHoward Hinnant if (__s) 3623e519524SHoward Hinnant { 3633e519524SHoward Hinnant if (__sb) 3643e519524SHoward Hinnant { 3653e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3663e519524SHoward Hinnant try 3673e519524SHoward Hinnant { 368b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 369c003db1fSHoward Hinnant typedef istreambuf_iterator<_CharT, _Traits> _Ip; 370c003db1fSHoward Hinnant typedef ostreambuf_iterator<_CharT, _Traits> _Op; 371c003db1fSHoward Hinnant _Ip __i(__sb); 372c003db1fSHoward Hinnant _Ip __eof; 373c003db1fSHoward Hinnant _Op __o(*this); 3743e519524SHoward Hinnant size_t __c = 0; 3753e519524SHoward Hinnant for (; __i != __eof; ++__i, ++__o, ++__c) 3763e519524SHoward Hinnant { 3773e519524SHoward Hinnant *__o = *__i; 3783e519524SHoward Hinnant if (__o.failed()) 3793e519524SHoward Hinnant break; 3803e519524SHoward Hinnant } 3813e519524SHoward Hinnant if (__c == 0) 3823e519524SHoward Hinnant this->setstate(ios_base::failbit); 3833e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3843e519524SHoward Hinnant } 3853e519524SHoward Hinnant catch (...) 3863e519524SHoward Hinnant { 3873e519524SHoward Hinnant this->__set_failbit_and_consider_rethrow(); 3883e519524SHoward Hinnant } 389b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 3903e519524SHoward Hinnant } 3913e519524SHoward Hinnant else 3923e519524SHoward Hinnant this->setstate(ios_base::badbit); 3933e519524SHoward Hinnant } 3943e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 3953e519524SHoward Hinnant } 3963e519524SHoward Hinnant catch (...) 3973e519524SHoward Hinnant { 3983e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 3993e519524SHoward Hinnant } 400b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4013e519524SHoward Hinnant return *this; 4023e519524SHoward Hinnant} 4033e519524SHoward Hinnant 4043e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 4053e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 4063e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(bool __n) 4073e519524SHoward Hinnant{ 4083e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4093e519524SHoward Hinnant try 4103e519524SHoward Hinnant { 411b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4123e519524SHoward Hinnant sentry __s(*this); 4133e519524SHoward Hinnant if (__s) 4143e519524SHoward Hinnant { 415c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 416c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 4173e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 4183e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 4193e519524SHoward Hinnant } 4203e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4213e519524SHoward Hinnant } 4223e519524SHoward Hinnant catch (...) 4233e519524SHoward Hinnant { 4243e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 4253e519524SHoward Hinnant } 426b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4273e519524SHoward Hinnant return *this; 4283e519524SHoward Hinnant} 4293e519524SHoward Hinnant 4303e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 4313e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 4323e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(short __n) 4333e519524SHoward Hinnant{ 4343e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4353e519524SHoward Hinnant try 4363e519524SHoward Hinnant { 437b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4383e519524SHoward Hinnant sentry __s(*this); 4393e519524SHoward Hinnant if (__s) 4403e519524SHoward Hinnant { 4413e519524SHoward Hinnant ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 442c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 443c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 4443e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), 4453e519524SHoward Hinnant __flags == ios_base::oct || __flags == ios_base::hex ? 4463e519524SHoward Hinnant static_cast<long>(static_cast<unsigned short>(__n)) : 4473e519524SHoward Hinnant static_cast<long>(__n)).failed()) 4483e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 4493e519524SHoward Hinnant } 4503e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4513e519524SHoward Hinnant } 4523e519524SHoward Hinnant catch (...) 4533e519524SHoward Hinnant { 4543e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 4553e519524SHoward Hinnant } 456b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4573e519524SHoward Hinnant return *this; 4583e519524SHoward Hinnant} 4593e519524SHoward Hinnant 4603e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 4613e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 4623e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n) 4633e519524SHoward Hinnant{ 4643e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4653e519524SHoward Hinnant try 4663e519524SHoward Hinnant { 467b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4683e519524SHoward Hinnant sentry __s(*this); 4693e519524SHoward Hinnant if (__s) 4703e519524SHoward Hinnant { 471c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 472c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 4733e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 4743e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 4753e519524SHoward Hinnant } 4763e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4773e519524SHoward Hinnant } 4783e519524SHoward Hinnant catch (...) 4793e519524SHoward Hinnant { 4803e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 4813e519524SHoward Hinnant } 482b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4833e519524SHoward Hinnant return *this; 4843e519524SHoward Hinnant} 4853e519524SHoward Hinnant 4863e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 4873e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 4883e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(int __n) 4893e519524SHoward Hinnant{ 4903e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 4913e519524SHoward Hinnant try 4923e519524SHoward Hinnant { 493b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 4943e519524SHoward Hinnant sentry __s(*this); 4953e519524SHoward Hinnant if (__s) 4963e519524SHoward Hinnant { 4973e519524SHoward Hinnant ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 498c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 499c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 5003e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), 5013e519524SHoward Hinnant __flags == ios_base::oct || __flags == ios_base::hex ? 5023e519524SHoward Hinnant static_cast<long>(static_cast<unsigned int>(__n)) : 5033e519524SHoward Hinnant static_cast<long>(__n)).failed()) 5043e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 5053e519524SHoward Hinnant } 5063e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5073e519524SHoward Hinnant } 5083e519524SHoward Hinnant catch (...) 5093e519524SHoward Hinnant { 5103e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 5113e519524SHoward Hinnant } 512b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5133e519524SHoward Hinnant return *this; 5143e519524SHoward Hinnant} 5153e519524SHoward Hinnant 5163e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 5173e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 5183e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n) 5193e519524SHoward Hinnant{ 5203e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5213e519524SHoward Hinnant try 5223e519524SHoward Hinnant { 523b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5243e519524SHoward Hinnant sentry __s(*this); 5253e519524SHoward Hinnant if (__s) 5263e519524SHoward Hinnant { 527c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 528c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 5293e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 5303e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 5313e519524SHoward Hinnant } 5323e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5333e519524SHoward Hinnant } 5343e519524SHoward Hinnant catch (...) 5353e519524SHoward Hinnant { 5363e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 5373e519524SHoward Hinnant } 538b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5393e519524SHoward Hinnant return *this; 5403e519524SHoward Hinnant} 5413e519524SHoward Hinnant 5423e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 5433e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 5443e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(long __n) 5453e519524SHoward Hinnant{ 5463e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5473e519524SHoward Hinnant try 5483e519524SHoward Hinnant { 549b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5503e519524SHoward Hinnant sentry __s(*this); 5513e519524SHoward Hinnant if (__s) 5523e519524SHoward Hinnant { 553c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 554c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 5553e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 5563e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 5573e519524SHoward Hinnant } 5583e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5593e519524SHoward Hinnant } 5603e519524SHoward Hinnant catch (...) 5613e519524SHoward Hinnant { 5623e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 5633e519524SHoward Hinnant } 564b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5653e519524SHoward Hinnant return *this; 5663e519524SHoward Hinnant} 5673e519524SHoward Hinnant 5683e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 5693e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 5703e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) 5713e519524SHoward Hinnant{ 5723e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5733e519524SHoward Hinnant try 5743e519524SHoward Hinnant { 575b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5763e519524SHoward Hinnant sentry __s(*this); 5773e519524SHoward Hinnant if (__s) 5783e519524SHoward Hinnant { 579c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 580c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 5813e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 5823e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 5833e519524SHoward Hinnant } 5843e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5853e519524SHoward Hinnant } 5863e519524SHoward Hinnant catch (...) 5873e519524SHoward Hinnant { 5883e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 5893e519524SHoward Hinnant } 590b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 5913e519524SHoward Hinnant return *this; 5923e519524SHoward Hinnant} 5933e519524SHoward Hinnant 5943e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 5953e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 5963e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(long long __n) 5973e519524SHoward Hinnant{ 5983e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 5993e519524SHoward Hinnant try 6003e519524SHoward Hinnant { 601b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6023e519524SHoward Hinnant sentry __s(*this); 6033e519524SHoward Hinnant if (__s) 6043e519524SHoward Hinnant { 605c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 606c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 6073e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 6083e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 6093e519524SHoward Hinnant } 6103e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6113e519524SHoward Hinnant } 6123e519524SHoward Hinnant catch (...) 6133e519524SHoward Hinnant { 6143e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 6153e519524SHoward Hinnant } 616b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6173e519524SHoward Hinnant return *this; 6183e519524SHoward Hinnant} 6193e519524SHoward Hinnant 6203e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 6213e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 6223e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) 6233e519524SHoward Hinnant{ 6243e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6253e519524SHoward Hinnant try 6263e519524SHoward Hinnant { 627b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6283e519524SHoward Hinnant sentry __s(*this); 6293e519524SHoward Hinnant if (__s) 6303e519524SHoward Hinnant { 631c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 632c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 6333e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 6343e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 6353e519524SHoward Hinnant } 6363e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6373e519524SHoward Hinnant } 6383e519524SHoward Hinnant catch (...) 6393e519524SHoward Hinnant { 6403e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 6413e519524SHoward Hinnant } 642b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6433e519524SHoward Hinnant return *this; 6443e519524SHoward Hinnant} 6453e519524SHoward Hinnant 6463e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 6473e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 6483e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(float __n) 6493e519524SHoward Hinnant{ 6503e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6513e519524SHoward Hinnant try 6523e519524SHoward Hinnant { 653b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6543e519524SHoward Hinnant sentry __s(*this); 6553e519524SHoward Hinnant if (__s) 6563e519524SHoward Hinnant { 657c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 658c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 6593e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed()) 6603e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 6613e519524SHoward Hinnant } 6623e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6633e519524SHoward Hinnant } 6643e519524SHoward Hinnant catch (...) 6653e519524SHoward Hinnant { 6663e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 6673e519524SHoward Hinnant } 668b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6693e519524SHoward Hinnant return *this; 6703e519524SHoward Hinnant} 6713e519524SHoward Hinnant 6723e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 6733e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 6743e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(double __n) 6753e519524SHoward Hinnant{ 6763e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6773e519524SHoward Hinnant try 6783e519524SHoward Hinnant { 679b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6803e519524SHoward Hinnant sentry __s(*this); 6813e519524SHoward Hinnant if (__s) 6823e519524SHoward Hinnant { 683c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 684c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 6853e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 6863e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 6873e519524SHoward Hinnant } 6883e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 6893e519524SHoward Hinnant } 6903e519524SHoward Hinnant catch (...) 6913e519524SHoward Hinnant { 6923e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 6933e519524SHoward Hinnant } 694b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 6953e519524SHoward Hinnant return *this; 6963e519524SHoward Hinnant} 6973e519524SHoward Hinnant 6983e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 6993e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 7003e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(long double __n) 7013e519524SHoward Hinnant{ 7023e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7033e519524SHoward Hinnant try 7043e519524SHoward Hinnant { 705b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7063e519524SHoward Hinnant sentry __s(*this); 7073e519524SHoward Hinnant if (__s) 7083e519524SHoward Hinnant { 709c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 710c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 7113e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 7123e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 7133e519524SHoward Hinnant } 7143e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7153e519524SHoward Hinnant } 7163e519524SHoward Hinnant catch (...) 7173e519524SHoward Hinnant { 7183e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 7193e519524SHoward Hinnant } 720b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7213e519524SHoward Hinnant return *this; 7223e519524SHoward Hinnant} 7233e519524SHoward Hinnant 7243e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 7253e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 7263e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::operator<<(const void* __n) 7273e519524SHoward Hinnant{ 7283e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7293e519524SHoward Hinnant try 7303e519524SHoward Hinnant { 731b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7323e519524SHoward Hinnant sentry __s(*this); 7333e519524SHoward Hinnant if (__s) 7343e519524SHoward Hinnant { 735c003db1fSHoward Hinnant typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 736c003db1fSHoward Hinnant const _Fp& __f = use_facet<_Fp>(this->getloc()); 7373e519524SHoward Hinnant if (__f.put(*this, *this, this->fill(), __n).failed()) 7383e519524SHoward Hinnant this->setstate(ios_base::badbit | ios_base::failbit); 7393e519524SHoward Hinnant } 7403e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7413e519524SHoward Hinnant } 7423e519524SHoward Hinnant catch (...) 7433e519524SHoward Hinnant { 7443e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 7453e519524SHoward Hinnant } 746b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7473e519524SHoward Hinnant return *this; 7483e519524SHoward Hinnant} 7493e519524SHoward Hinnant 7503e519524SHoward Hinnanttemplate<class _CharT, class _Traits> 7513e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 7526bc32ebfSMarshall Clow__put_character_sequence(basic_ostream<_CharT, _Traits>& __os, 7536bc32ebfSMarshall Clow const _CharT* __str, size_t __len) 7543e519524SHoward Hinnant{ 7553e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7563e519524SHoward Hinnant try 7573e519524SHoward Hinnant { 758b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7593e519524SHoward Hinnant typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 7603e519524SHoward Hinnant if (__s) 7613e519524SHoward Hinnant { 762c003db1fSHoward Hinnant typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 763c003db1fSHoward Hinnant if (__pad_and_output(_Ip(__os), 7646bc32ebfSMarshall Clow __str, 7653e519524SHoward Hinnant (__os.flags() & ios_base::adjustfield) == ios_base::left ? 7666bc32ebfSMarshall Clow __str + __len : 7676bc32ebfSMarshall Clow __str, 7686bc32ebfSMarshall Clow __str + __len, 7693e519524SHoward Hinnant __os, 7703e519524SHoward Hinnant __os.fill()).failed()) 7713e519524SHoward Hinnant __os.setstate(ios_base::badbit | ios_base::failbit); 7723e519524SHoward Hinnant } 7733e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7743e519524SHoward Hinnant } 7753e519524SHoward Hinnant catch (...) 7763e519524SHoward Hinnant { 7773e519524SHoward Hinnant __os.__set_badbit_and_consider_rethrow(); 7783e519524SHoward Hinnant } 779b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7803e519524SHoward Hinnant return __os; 7813e519524SHoward Hinnant} 7823e519524SHoward Hinnant 7838d6ac8f6SVolodymyr Sapsai 7846bc32ebfSMarshall Clowtemplate<class _CharT, class _Traits> 7856bc32ebfSMarshall Clowbasic_ostream<_CharT, _Traits>& 7866bc32ebfSMarshall Clowoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) 7876bc32ebfSMarshall Clow{ 7886bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, &__c, 1); 7896bc32ebfSMarshall Clow} 7906bc32ebfSMarshall Clow 7913e519524SHoward Hinnanttemplate<class _CharT, class _Traits> 7923e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 7933e519524SHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn) 7943e519524SHoward Hinnant{ 7953e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 7963e519524SHoward Hinnant try 7973e519524SHoward Hinnant { 798b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 7993e519524SHoward Hinnant typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 8003e519524SHoward Hinnant if (__s) 8013e519524SHoward Hinnant { 8023e519524SHoward Hinnant _CharT __c = __os.widen(__cn); 803c003db1fSHoward Hinnant typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 804c003db1fSHoward Hinnant if (__pad_and_output(_Ip(__os), 8053e519524SHoward Hinnant &__c, 8063e519524SHoward Hinnant (__os.flags() & ios_base::adjustfield) == ios_base::left ? 8073e519524SHoward Hinnant &__c + 1 : 8083e519524SHoward Hinnant &__c, 8093e519524SHoward Hinnant &__c + 1, 8103e519524SHoward Hinnant __os, 8113e519524SHoward Hinnant __os.fill()).failed()) 8123e519524SHoward Hinnant __os.setstate(ios_base::badbit | ios_base::failbit); 8133e519524SHoward Hinnant } 8143e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 8153e519524SHoward Hinnant } 8163e519524SHoward Hinnant catch (...) 8173e519524SHoward Hinnant { 8183e519524SHoward Hinnant __os.__set_badbit_and_consider_rethrow(); 8193e519524SHoward Hinnant } 820b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 8213e519524SHoward Hinnant return __os; 8223e519524SHoward Hinnant} 8233e519524SHoward Hinnant 8243e519524SHoward Hinnanttemplate<class _Traits> 8253e519524SHoward Hinnantbasic_ostream<char, _Traits>& 8263e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, char __c) 8273e519524SHoward Hinnant{ 8286bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, &__c, 1); 8293e519524SHoward Hinnant} 8303e519524SHoward Hinnant 8313e519524SHoward Hinnanttemplate<class _Traits> 8323e519524SHoward Hinnantbasic_ostream<char, _Traits>& 8333e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, signed char __c) 8343e519524SHoward Hinnant{ 8356bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8363e519524SHoward Hinnant} 8373e519524SHoward Hinnant 8383e519524SHoward Hinnanttemplate<class _Traits> 8393e519524SHoward Hinnantbasic_ostream<char, _Traits>& 8403e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c) 8413e519524SHoward Hinnant{ 8426bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8433e519524SHoward Hinnant} 8443e519524SHoward Hinnant 8453e519524SHoward Hinnanttemplate<class _CharT, class _Traits> 8463e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 8473e519524SHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str) 8483e519524SHoward Hinnant{ 8496bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 8503e519524SHoward Hinnant} 8513e519524SHoward Hinnant 8523e519524SHoward Hinnanttemplate<class _CharT, class _Traits> 8533e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 8543e519524SHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn) 8553e519524SHoward Hinnant{ 8563e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 8573e519524SHoward Hinnant try 8583e519524SHoward Hinnant { 859b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 8603e519524SHoward Hinnant typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 8613e519524SHoward Hinnant if (__s) 8623e519524SHoward Hinnant { 863c003db1fSHoward Hinnant typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 8643e519524SHoward Hinnant size_t __len = char_traits<char>::length(__strn); 8653e519524SHoward Hinnant const int __bs = 100; 8663e519524SHoward Hinnant _CharT __wbb[__bs]; 8673e519524SHoward Hinnant _CharT* __wb = __wbb; 8683e519524SHoward Hinnant unique_ptr<_CharT, void(*)(void*)> __h(0, free); 8693e519524SHoward Hinnant if (__len > __bs) 8703e519524SHoward Hinnant { 8713e519524SHoward Hinnant __wb = (_CharT*)malloc(__len*sizeof(_CharT)); 8723e519524SHoward Hinnant if (__wb == 0) 8733e519524SHoward Hinnant __throw_bad_alloc(); 8743e519524SHoward Hinnant __h.reset(__wb); 8753e519524SHoward Hinnant } 8763e519524SHoward Hinnant for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p) 8773e519524SHoward Hinnant *__p = __os.widen(*__strn); 878c003db1fSHoward Hinnant if (__pad_and_output(_Ip(__os), 8793e519524SHoward Hinnant __wb, 8803e519524SHoward Hinnant (__os.flags() & ios_base::adjustfield) == ios_base::left ? 8813e519524SHoward Hinnant __wb + __len : 8823e519524SHoward Hinnant __wb, 8833e519524SHoward Hinnant __wb + __len, 8843e519524SHoward Hinnant __os, 8853e519524SHoward Hinnant __os.fill()).failed()) 8863e519524SHoward Hinnant __os.setstate(ios_base::badbit | ios_base::failbit); 8873e519524SHoward Hinnant } 8883e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 8893e519524SHoward Hinnant } 8903e519524SHoward Hinnant catch (...) 8913e519524SHoward Hinnant { 8923e519524SHoward Hinnant __os.__set_badbit_and_consider_rethrow(); 8933e519524SHoward Hinnant } 894b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 8953e519524SHoward Hinnant return __os; 8963e519524SHoward Hinnant} 8973e519524SHoward Hinnant 8983e519524SHoward Hinnanttemplate<class _Traits> 8993e519524SHoward Hinnantbasic_ostream<char, _Traits>& 9003e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, const char* __str) 9013e519524SHoward Hinnant{ 9026bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 9033e519524SHoward Hinnant} 9043e519524SHoward Hinnant 9053e519524SHoward Hinnanttemplate<class _Traits> 9063e519524SHoward Hinnantbasic_ostream<char, _Traits>& 9073e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str) 9083e519524SHoward Hinnant{ 9096bc32ebfSMarshall Clow const char *__s = (const char *) __str; 9106bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 9113e519524SHoward Hinnant} 9123e519524SHoward Hinnant 9133e519524SHoward Hinnanttemplate<class _Traits> 9143e519524SHoward Hinnantbasic_ostream<char, _Traits>& 9153e519524SHoward Hinnantoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str) 9163e519524SHoward Hinnant{ 9176bc32ebfSMarshall Clow const char *__s = (const char *) __str; 9186bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 9193e519524SHoward Hinnant} 9203e519524SHoward Hinnant 9213e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 9223e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 9233e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::put(char_type __c) 9243e519524SHoward Hinnant{ 9253e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9263e519524SHoward Hinnant try 9273e519524SHoward Hinnant { 928b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9293e519524SHoward Hinnant sentry __s(*this); 9303e519524SHoward Hinnant if (__s) 9313e519524SHoward Hinnant { 932c003db1fSHoward Hinnant typedef ostreambuf_iterator<_CharT, _Traits> _Op; 933c003db1fSHoward Hinnant _Op __o(*this); 9343e519524SHoward Hinnant *__o = __c; 9353e519524SHoward Hinnant if (__o.failed()) 9363e519524SHoward Hinnant this->setstate(ios_base::badbit); 9373e519524SHoward Hinnant } 9383e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9393e519524SHoward Hinnant } 9403e519524SHoward Hinnant catch (...) 9413e519524SHoward Hinnant { 9423e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 9433e519524SHoward Hinnant } 944b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9453e519524SHoward Hinnant return *this; 9463e519524SHoward Hinnant} 9473e519524SHoward Hinnant 9483e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 9493e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 9503e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n) 9513e519524SHoward Hinnant{ 9523e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9533e519524SHoward Hinnant try 9543e519524SHoward Hinnant { 955b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9563e519524SHoward Hinnant sentry __sen(*this); 9573e519524SHoward Hinnant if (__sen && __n) 9583e519524SHoward Hinnant { 9593d7eb2f8SHoward Hinnant if (this->rdbuf()->sputn(__s, __n) != __n) 9603e519524SHoward Hinnant this->setstate(ios_base::badbit); 9613e519524SHoward Hinnant } 9623e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9633e519524SHoward Hinnant } 9643e519524SHoward Hinnant catch (...) 9653e519524SHoward Hinnant { 9663e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 9673e519524SHoward Hinnant } 968b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9693e519524SHoward Hinnant return *this; 9703e519524SHoward Hinnant} 9713e519524SHoward Hinnant 9723e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 9733e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 9743e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::flush() 9753e519524SHoward Hinnant{ 9763e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9773e519524SHoward Hinnant try 9783e519524SHoward Hinnant { 979b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9803e519524SHoward Hinnant if (this->rdbuf()) 9813e519524SHoward Hinnant { 9823e519524SHoward Hinnant sentry __s(*this); 9833e519524SHoward Hinnant if (__s) 9843e519524SHoward Hinnant { 9853e519524SHoward Hinnant if (this->rdbuf()->pubsync() == -1) 9863e519524SHoward Hinnant this->setstate(ios_base::badbit); 9873e519524SHoward Hinnant } 9883e519524SHoward Hinnant } 9893e519524SHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 9903e519524SHoward Hinnant } 9913e519524SHoward Hinnant catch (...) 9923e519524SHoward Hinnant { 9933e519524SHoward Hinnant this->__set_badbit_and_consider_rethrow(); 9943e519524SHoward Hinnant } 995b3371f6fSHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 9963e519524SHoward Hinnant return *this; 9973e519524SHoward Hinnant} 9983e519524SHoward Hinnant 9993e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10003e519524SHoward Hinnanttypename basic_ostream<_CharT, _Traits>::pos_type 10013e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::tellp() 10023e519524SHoward Hinnant{ 10033e519524SHoward Hinnant if (this->fail()) 10043e519524SHoward Hinnant return pos_type(-1); 10053e519524SHoward Hinnant return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); 10063e519524SHoward Hinnant} 10073e519524SHoward Hinnant 10083e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10093e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10103e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos) 10113e519524SHoward Hinnant{ 1012e1bedf4eSMarshall Clow sentry __s(*this); 101399f5fc93SMarshall Clow if (!this->fail()) 10143e519524SHoward Hinnant { 10153e519524SHoward Hinnant if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1)) 10163e519524SHoward Hinnant this->setstate(ios_base::failbit); 10173e519524SHoward Hinnant } 10183e519524SHoward Hinnant return *this; 10193e519524SHoward Hinnant} 10203e519524SHoward Hinnant 10213e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10223e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10233e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir) 10243e519524SHoward Hinnant{ 1025e1bedf4eSMarshall Clow sentry __s(*this); 102699f5fc93SMarshall Clow if (!this->fail()) 1027e1bedf4eSMarshall Clow { 1028e1bedf4eSMarshall Clow if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1)) 1029e1bedf4eSMarshall Clow this->setstate(ios_base::failbit); 1030e1bedf4eSMarshall Clow } 10313e519524SHoward Hinnant return *this; 10323e519524SHoward Hinnant} 10333e519524SHoward Hinnant 10343e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10352d3b8cc8SLouis Dionneinline 10363e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10373e519524SHoward Hinnantendl(basic_ostream<_CharT, _Traits>& __os) 10383e519524SHoward Hinnant{ 10393e519524SHoward Hinnant __os.put(__os.widen('\n')); 10403e519524SHoward Hinnant __os.flush(); 10413e519524SHoward Hinnant return __os; 10423e519524SHoward Hinnant} 10433e519524SHoward Hinnant 10443e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10452d3b8cc8SLouis Dionneinline 10463e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10473e519524SHoward Hinnantends(basic_ostream<_CharT, _Traits>& __os) 10483e519524SHoward Hinnant{ 10493e519524SHoward Hinnant __os.put(_CharT()); 10503e519524SHoward Hinnant return __os; 10513e519524SHoward Hinnant} 10523e519524SHoward Hinnant 10533e519524SHoward Hinnanttemplate <class _CharT, class _Traits> 10542d3b8cc8SLouis Dionneinline 10553e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10563e519524SHoward Hinnantflush(basic_ostream<_CharT, _Traits>& __os) 10573e519524SHoward Hinnant{ 10583e519524SHoward Hinnant __os.flush(); 10593e519524SHoward Hinnant return __os; 10603e519524SHoward Hinnant} 10613e519524SHoward Hinnant 1062c90dee1eSLouis Dionnetemplate <class _Stream, class _Tp, class = void> 1063c90dee1eSLouis Dionnestruct __is_ostreamable : false_type { }; 1064c90dee1eSLouis Dionne 10653e519524SHoward Hinnanttemplate <class _Stream, class _Tp> 1066c90dee1eSLouis Dionnestruct __is_ostreamable<_Stream, _Tp, decltype( 1067ab3fcc50SArthur O'Dwyer declval<_Stream>() << declval<_Tp>(), void() 1068c90dee1eSLouis Dionne)> : true_type { }; 1069c90dee1eSLouis Dionne 1070c90dee1eSLouis Dionnetemplate <class _Stream, class _Tp, class = typename enable_if< 1071c90dee1eSLouis Dionne _And<is_base_of<ios_base, _Stream>, 1072c90dee1eSLouis Dionne __is_ostreamable<_Stream&, const _Tp&> >::value 1073c90dee1eSLouis Dionne>::type> 1074c90dee1eSLouis Dionne_LIBCPP_INLINE_VISIBILITY 1075c90dee1eSLouis Dionne_Stream&& operator<<(_Stream&& __os, const _Tp& __x) 10763e519524SHoward Hinnant{ 10773e519524SHoward Hinnant __os << __x; 1078c37917f3SHoward Hinnant return _VSTD::move(__os); 10793e519524SHoward Hinnant} 10803e519524SHoward Hinnant 10813e519524SHoward Hinnanttemplate<class _CharT, class _Traits, class _Allocator> 10823e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 10833e519524SHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, 10843e519524SHoward Hinnant const basic_string<_CharT, _Traits, _Allocator>& __str) 10853e519524SHoward Hinnant{ 10866bc32ebfSMarshall Clow return _VSTD::__put_character_sequence(__os, __str.data(), __str.size()); 10873e519524SHoward Hinnant} 10883e519524SHoward Hinnant 10893e519524SHoward Hinnanttemplate<class _CharT, class _Traits> 1090053d81ceSMarshall Clowbasic_ostream<_CharT, _Traits>& 1091053d81ceSMarshall Clowoperator<<(basic_ostream<_CharT, _Traits>& __os, 1092af4a29afSEric Fiselier basic_string_view<_CharT, _Traits> __sv) 1093053d81ceSMarshall Clow{ 1094053d81ceSMarshall Clow return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size()); 1095053d81ceSMarshall Clow} 1096053d81ceSMarshall Clow 1097053d81ceSMarshall Clowtemplate <class _CharT, class _Traits> 1098c86b3920SEvgeniy Stepanovinline _LIBCPP_INLINE_VISIBILITY 10993e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 11003e519524SHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec) 11013e519524SHoward Hinnant{ 11023e519524SHoward Hinnant return __os << __ec.category().name() << ':' << __ec.value(); 11033e519524SHoward Hinnant} 11043e519524SHoward Hinnant 1105c003db1fSHoward Hinnanttemplate<class _CharT, class _Traits, class _Yp> 1106c86b3920SEvgeniy Stepanovinline _LIBCPP_INLINE_VISIBILITY 11073e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 1108c003db1fSHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p) 11093e519524SHoward Hinnant{ 11103e519524SHoward Hinnant return __os << __p.get(); 11113e519524SHoward Hinnant} 11123e519524SHoward Hinnant 111348f36539SMarshall Clowtemplate<class _CharT, class _Traits, class _Yp, class _Dp> 111448f36539SMarshall Clowinline _LIBCPP_INLINE_VISIBILITY 111548f36539SMarshall Clowtypename enable_if 111648f36539SMarshall Clow< 1117a4122be5SMarshall Clow is_same<void, typename __void_t<decltype((declval<basic_ostream<_CharT, _Traits>&>() << declval<typename unique_ptr<_Yp, _Dp>::pointer>()))>::type>::value, 111848f36539SMarshall Clow basic_ostream<_CharT, _Traits>& 111948f36539SMarshall Clow>::type 112048f36539SMarshall Clowoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p) 112148f36539SMarshall Clow{ 112248f36539SMarshall Clow return __os << __p.get(); 112348f36539SMarshall Clow} 112448f36539SMarshall Clow 11253e519524SHoward Hinnanttemplate <class _CharT, class _Traits, size_t _Size> 11263e519524SHoward Hinnantbasic_ostream<_CharT, _Traits>& 1127a9c7c14eSHoward Hinnantoperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x) 11283e519524SHoward Hinnant{ 11293e519524SHoward Hinnant return __os << __x.template to_string<_CharT, _Traits> 11303e519524SHoward Hinnant (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'), 11313e519524SHoward Hinnant use_facet<ctype<_CharT> >(__os.getloc()).widen('1')); 11323e519524SHoward Hinnant} 11333e519524SHoward Hinnant 1134*309aed30SNikolas Klauser#if _LIBCPP_STD_VER > 17 1135*309aed30SNikolas Klauser 1136*309aed30SNikolas Klauser#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 1137*309aed30SNikolas Klausertemplate <class _Traits> 1138*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, wchar_t) = delete; 1139*309aed30SNikolas Klauser 1140*309aed30SNikolas Klausertemplate <class _Traits> 1141*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const wchar_t*) = delete; 1142*309aed30SNikolas Klauser 1143*309aed30SNikolas Klausertemplate <class _Traits> 1144*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char16_t) = delete; 1145*309aed30SNikolas Klauser 1146*309aed30SNikolas Klausertemplate <class _Traits> 1147*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char32_t) = delete; 1148*309aed30SNikolas Klauser 1149*309aed30SNikolas Klausertemplate <class _Traits> 1150*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char16_t*) = delete; 1151*309aed30SNikolas Klauser 1152*309aed30SNikolas Klausertemplate <class _Traits> 1153*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char32_t*) = delete; 1154*309aed30SNikolas Klauser 1155*309aed30SNikolas Klauser#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS 1156*309aed30SNikolas Klauser 1157*309aed30SNikolas Klauser#ifndef _LIBCPP_HAS_NO_CHAR8_T 1158*309aed30SNikolas Klausertemplate <class _Traits> 1159*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char8_t) = delete; 1160*309aed30SNikolas Klauser 1161*309aed30SNikolas Klausertemplate <class _Traits> 1162*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, char8_t) = delete; 1163*309aed30SNikolas Klauser 1164*309aed30SNikolas Klausertemplate <class _Traits> 1165*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char8_t*) = delete; 1166*309aed30SNikolas Klauser 1167*309aed30SNikolas Klausertemplate <class _Traits> 1168*309aed30SNikolas Klauserbasic_ostream<wchar_t, _Traits>& operator<<(basic_ostream<wchar_t, _Traits>&, const char8_t*) = delete; 1169*309aed30SNikolas Klauser#endif 1170*309aed30SNikolas Klauser 1171*309aed30SNikolas Klausertemplate <class _Traits> 1172*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char16_t) = delete; 1173*309aed30SNikolas Klauser 1174*309aed30SNikolas Klausertemplate <class _Traits> 1175*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, char32_t) = delete; 1176*309aed30SNikolas Klauser 1177*309aed30SNikolas Klausertemplate <class _Traits> 1178*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char16_t*) = delete; 1179*309aed30SNikolas Klauser 1180*309aed30SNikolas Klausertemplate <class _Traits> 1181*309aed30SNikolas Klauserbasic_ostream<char, _Traits>& operator<<(basic_ostream<char, _Traits>&, const char32_t*) = delete; 1182*309aed30SNikolas Klauser 1183*309aed30SNikolas Klauser#endif // _LIBCPP_STD_VER > 17 1184*309aed30SNikolas Klauser 11852ae52326SLouis Dionneextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>; 1186f4c1258dSLouis Dionne#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 11872ae52326SLouis Dionneextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>; 1188f4c1258dSLouis Dionne#endif 11893e519524SHoward Hinnant 11903e519524SHoward Hinnant_LIBCPP_END_NAMESPACE_STD 11913e519524SHoward Hinnant 11923e519524SHoward Hinnant#endif // _LIBCPP_OSTREAM 1193