10b57cec5SDimitry Andric// -*- C++ -*- 2349cc55cSDimitry Andric//===----------------------------------------------------------------------===// 30b57cec5SDimitry Andric// 40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 90b57cec5SDimitry Andric 100b57cec5SDimitry Andric#ifndef _LIBCPP_OSTREAM 110b57cec5SDimitry Andric#define _LIBCPP_OSTREAM 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric/* 140b57cec5SDimitry Andric ostream synopsis 150b57cec5SDimitry Andric 160b57cec5SDimitry Andrictemplate <class charT, class traits = char_traits<charT> > 170b57cec5SDimitry Andricclass basic_ostream 180b57cec5SDimitry Andric : virtual public basic_ios<charT,traits> 190b57cec5SDimitry Andric{ 200b57cec5SDimitry Andricpublic: 210b57cec5SDimitry Andric // types (inherited from basic_ios (27.5.4)): 220b57cec5SDimitry Andric typedef charT char_type; 230b57cec5SDimitry Andric typedef traits traits_type; 240b57cec5SDimitry Andric typedef typename traits_type::int_type int_type; 250b57cec5SDimitry Andric typedef typename traits_type::pos_type pos_type; 260b57cec5SDimitry Andric typedef typename traits_type::off_type off_type; 270b57cec5SDimitry Andric 280b57cec5SDimitry Andric // 27.7.2.2 Constructor/destructor: 290b57cec5SDimitry Andric explicit basic_ostream(basic_streambuf<char_type,traits>* sb); 300b57cec5SDimitry Andric basic_ostream(basic_ostream&& rhs); 310b57cec5SDimitry Andric virtual ~basic_ostream(); 320b57cec5SDimitry Andric 330b57cec5SDimitry Andric // 27.7.2.3 Assign/swap 340b57cec5SDimitry Andric basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14 350b57cec5SDimitry Andric basic_ostream& operator=(basic_ostream&& rhs); 360b57cec5SDimitry Andric void swap(basic_ostream& rhs); 370b57cec5SDimitry Andric 380b57cec5SDimitry Andric // 27.7.2.4 Prefix/suffix: 390b57cec5SDimitry Andric class sentry; 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric // 27.7.2.6 Formatted output: 420b57cec5SDimitry Andric basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&)); 430b57cec5SDimitry Andric basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&)); 440b57cec5SDimitry Andric basic_ostream& operator<<(ios_base& (*pf)(ios_base&)); 450b57cec5SDimitry Andric basic_ostream& operator<<(bool n); 460b57cec5SDimitry Andric basic_ostream& operator<<(short n); 470b57cec5SDimitry Andric basic_ostream& operator<<(unsigned short n); 480b57cec5SDimitry Andric basic_ostream& operator<<(int n); 490b57cec5SDimitry Andric basic_ostream& operator<<(unsigned int n); 500b57cec5SDimitry Andric basic_ostream& operator<<(long n); 510b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long n); 520b57cec5SDimitry Andric basic_ostream& operator<<(long long n); 530b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long long n); 540b57cec5SDimitry Andric basic_ostream& operator<<(float f); 550b57cec5SDimitry Andric basic_ostream& operator<<(double f); 560b57cec5SDimitry Andric basic_ostream& operator<<(long double f); 570b57cec5SDimitry Andric basic_ostream& operator<<(const void* p); 58349cc55cSDimitry Andric basic_ostream& operator<<(const volatile void* val); // C++23 590b57cec5SDimitry Andric basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb); 600b57cec5SDimitry Andric basic_ostream& operator<<(nullptr_t); 610b57cec5SDimitry Andric 620b57cec5SDimitry Andric // 27.7.2.7 Unformatted output: 630b57cec5SDimitry Andric basic_ostream& put(char_type c); 640b57cec5SDimitry Andric basic_ostream& write(const char_type* s, streamsize n); 650b57cec5SDimitry Andric basic_ostream& flush(); 660b57cec5SDimitry Andric 670b57cec5SDimitry Andric // 27.7.2.5 seeks: 680b57cec5SDimitry Andric pos_type tellp(); 690b57cec5SDimitry Andric basic_ostream& seekp(pos_type); 700b57cec5SDimitry Andric basic_ostream& seekp(off_type, ios_base::seekdir); 710b57cec5SDimitry Andricprotected: 720b57cec5SDimitry Andric basic_ostream(const basic_ostream& rhs) = delete; 730b57cec5SDimitry Andric basic_ostream(basic_ostream&& rhs); 740b57cec5SDimitry Andric // 27.7.3.3 Assign/swap 750b57cec5SDimitry Andric basic_ostream& operator=(basic_ostream& rhs) = delete; 760b57cec5SDimitry Andric basic_ostream& operator=(const basic_ostream&& rhs); 770b57cec5SDimitry Andric void swap(basic_ostream& rhs); 780b57cec5SDimitry Andric}; 790b57cec5SDimitry Andric 800b57cec5SDimitry Andric// 27.7.2.6.4 character inserters 810b57cec5SDimitry Andric 820b57cec5SDimitry Andrictemplate<class charT, class traits> 830b57cec5SDimitry Andric basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT); 840b57cec5SDimitry Andric 850b57cec5SDimitry Andrictemplate<class charT, class traits> 860b57cec5SDimitry Andric basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char); 870b57cec5SDimitry Andric 880b57cec5SDimitry Andrictemplate<class traits> 890b57cec5SDimitry Andric basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char); 900b57cec5SDimitry Andric 910b57cec5SDimitry Andric// signed and unsigned 920b57cec5SDimitry Andric 930b57cec5SDimitry Andrictemplate<class traits> 940b57cec5SDimitry Andric basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char); 950b57cec5SDimitry Andric 960b57cec5SDimitry Andrictemplate<class traits> 970b57cec5SDimitry Andric basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char); 980b57cec5SDimitry Andric 990b57cec5SDimitry Andric// NTBS 1000b57cec5SDimitry Andrictemplate<class charT, class traits> 1010b57cec5SDimitry Andric basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*); 1020b57cec5SDimitry Andric 1030b57cec5SDimitry Andrictemplate<class charT, class traits> 1040b57cec5SDimitry Andric basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*); 1050b57cec5SDimitry Andric 1060b57cec5SDimitry Andrictemplate<class traits> 1070b57cec5SDimitry Andric basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*); 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andric// signed and unsigned 1100b57cec5SDimitry Andrictemplate<class traits> 1110b57cec5SDimitry Andricbasic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*); 1120b57cec5SDimitry Andric 1130b57cec5SDimitry Andrictemplate<class traits> 1140b57cec5SDimitry Andric basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*); 1150b57cec5SDimitry Andric 1160b57cec5SDimitry Andric// swap: 1170b57cec5SDimitry Andrictemplate <class charT, class traits> 1180b57cec5SDimitry Andric void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y); 1190b57cec5SDimitry Andric 1200b57cec5SDimitry Andrictemplate <class charT, class traits> 1210b57cec5SDimitry Andric basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os); 1220b57cec5SDimitry Andric 1230b57cec5SDimitry Andrictemplate <class charT, class traits> 1240b57cec5SDimitry Andric basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os); 1250b57cec5SDimitry Andric 1260b57cec5SDimitry Andrictemplate <class charT, class traits> 1270b57cec5SDimitry Andric basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os); 1280b57cec5SDimitry Andric 1290b57cec5SDimitry Andric// rvalue stream insertion 130e8d8bef9SDimitry Andrictemplate <class Stream, class T> 131e8d8bef9SDimitry Andric Stream&& operator<<(Stream&& os, const T& x); 1320b57cec5SDimitry Andric 1330b57cec5SDimitry Andric} // std 1340b57cec5SDimitry Andric 1350b57cec5SDimitry Andric*/ 1360b57cec5SDimitry Andric 137*81ad6265SDimitry Andric#include <__assert> // all public C++ headers provide the assertion handler 1380b57cec5SDimitry Andric#include <__config> 1390b57cec5SDimitry Andric#include <bitset> 140fe6060f1SDimitry Andric#include <ios> 141fe6060f1SDimitry Andric#include <locale> 142fe6060f1SDimitry Andric#include <streambuf> 1430b57cec5SDimitry Andric#include <version> 1440b57cec5SDimitry Andric 145*81ad6265SDimitry Andric#ifndef _LIBCPP_REMOVE_TRANSITIVE_INCLUDES 146*81ad6265SDimitry Andric# include <iterator> 147*81ad6265SDimitry Andric#endif 148*81ad6265SDimitry Andric 1490b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1500b57cec5SDimitry Andric# pragma GCC system_header 1510b57cec5SDimitry Andric#endif 1520b57cec5SDimitry Andric 1530b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 1560b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream 1570b57cec5SDimitry Andric : virtual public basic_ios<_CharT, _Traits> 1580b57cec5SDimitry Andric{ 1590b57cec5SDimitry Andricpublic: 1600b57cec5SDimitry Andric // types (inherited from basic_ios (27.5.4)): 1610b57cec5SDimitry Andric typedef _CharT char_type; 1620b57cec5SDimitry Andric typedef _Traits traits_type; 1630b57cec5SDimitry Andric typedef typename traits_type::int_type int_type; 1640b57cec5SDimitry Andric typedef typename traits_type::pos_type pos_type; 1650b57cec5SDimitry Andric typedef typename traits_type::off_type off_type; 1660b57cec5SDimitry Andric 1670b57cec5SDimitry Andric // 27.7.2.2 Constructor/destructor: 1680b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1690b57cec5SDimitry Andric explicit basic_ostream(basic_streambuf<char_type, traits_type>* __sb) 1700b57cec5SDimitry Andric { this->init(__sb); } 1710b57cec5SDimitry Andric virtual ~basic_ostream(); 1720b57cec5SDimitry Andricprotected: 1730b57cec5SDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 1740b57cec5SDimitry Andric basic_ostream(basic_ostream&& __rhs); 1750b57cec5SDimitry Andric 1760b57cec5SDimitry Andric // 27.7.2.3 Assign/swap 1770b57cec5SDimitry Andric inline _LIBCPP_INLINE_VISIBILITY 1780b57cec5SDimitry Andric basic_ostream& operator=(basic_ostream&& __rhs); 179fe6060f1SDimitry Andric 1800b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1810b57cec5SDimitry Andric void swap(basic_ostream& __rhs) 1820b57cec5SDimitry Andric { basic_ios<char_type, traits_type>::swap(__rhs); } 1830b57cec5SDimitry Andric 1840b57cec5SDimitry Andric basic_ostream (const basic_ostream& __rhs) = delete; 1850b57cec5SDimitry Andric basic_ostream& operator=(const basic_ostream& __rhs) = delete; 1860b57cec5SDimitry Andric 187fe6060f1SDimitry Andricpublic: 1880b57cec5SDimitry Andric // 27.7.2.4 Prefix/suffix: 1890b57cec5SDimitry Andric class _LIBCPP_TEMPLATE_VIS sentry; 1900b57cec5SDimitry Andric 1910b57cec5SDimitry Andric // 27.7.2.6 Formatted output: 1920b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1930b57cec5SDimitry Andric basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&)) 1940b57cec5SDimitry Andric { return __pf(*this); } 1950b57cec5SDimitry Andric 1960b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 1970b57cec5SDimitry Andric basic_ostream& operator<<(basic_ios<char_type, traits_type>& 1980b57cec5SDimitry Andric (*__pf)(basic_ios<char_type,traits_type>&)) 1990b57cec5SDimitry Andric { __pf(*this); return *this; } 2000b57cec5SDimitry Andric 2010b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2020b57cec5SDimitry Andric basic_ostream& operator<<(ios_base& (*__pf)(ios_base&)) 2030b57cec5SDimitry Andric { __pf(*this); return *this; } 2040b57cec5SDimitry Andric 2050b57cec5SDimitry Andric basic_ostream& operator<<(bool __n); 2060b57cec5SDimitry Andric basic_ostream& operator<<(short __n); 2070b57cec5SDimitry Andric basic_ostream& operator<<(unsigned short __n); 2080b57cec5SDimitry Andric basic_ostream& operator<<(int __n); 2090b57cec5SDimitry Andric basic_ostream& operator<<(unsigned int __n); 2100b57cec5SDimitry Andric basic_ostream& operator<<(long __n); 2110b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long __n); 2120b57cec5SDimitry Andric basic_ostream& operator<<(long long __n); 2130b57cec5SDimitry Andric basic_ostream& operator<<(unsigned long long __n); 2140b57cec5SDimitry Andric basic_ostream& operator<<(float __f); 2150b57cec5SDimitry Andric basic_ostream& operator<<(double __f); 2160b57cec5SDimitry Andric basic_ostream& operator<<(long double __f); 2170b57cec5SDimitry Andric basic_ostream& operator<<(const void* __p); 218349cc55cSDimitry Andric 219349cc55cSDimitry Andric#if _LIBCPP_STD_VER > 20 220349cc55cSDimitry Andric _LIBCPP_HIDE_FROM_ABI 221349cc55cSDimitry Andric basic_ostream& operator<<(const volatile void* __p) { 222349cc55cSDimitry Andric return operator<<(const_cast<const void*>(__p)); 223349cc55cSDimitry Andric } 224349cc55cSDimitry Andric#endif 225349cc55cSDimitry Andric 2260b57cec5SDimitry Andric basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb); 2270b57cec5SDimitry Andric 2280b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 2290b57cec5SDimitry Andric basic_ostream& operator<<(nullptr_t) 2300b57cec5SDimitry Andric { return *this << "nullptr"; } 2310b57cec5SDimitry Andric 2320b57cec5SDimitry Andric // 27.7.2.7 Unformatted output: 2330b57cec5SDimitry Andric basic_ostream& put(char_type __c); 2340b57cec5SDimitry Andric basic_ostream& write(const char_type* __s, streamsize __n); 2350b57cec5SDimitry Andric basic_ostream& flush(); 2360b57cec5SDimitry Andric 2370b57cec5SDimitry Andric // 27.7.2.5 seeks: 2380b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2390b57cec5SDimitry Andric pos_type tellp(); 2400b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2410b57cec5SDimitry Andric basic_ostream& seekp(pos_type __pos); 2420b57cec5SDimitry Andric inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1 2430b57cec5SDimitry Andric basic_ostream& seekp(off_type __off, ios_base::seekdir __dir); 2440b57cec5SDimitry Andric 2450b57cec5SDimitry Andricprotected: 2460b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 2470b57cec5SDimitry Andric basic_ostream() {} // extension, intentially does not initialize 2480b57cec5SDimitry Andric}; 2490b57cec5SDimitry Andric 2500b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 2510b57cec5SDimitry Andricclass _LIBCPP_TEMPLATE_VIS basic_ostream<_CharT, _Traits>::sentry 2520b57cec5SDimitry Andric{ 2530b57cec5SDimitry Andric bool __ok_; 2540b57cec5SDimitry Andric basic_ostream<_CharT, _Traits>& __os_; 2550b57cec5SDimitry Andric 2560b57cec5SDimitry Andricpublic: 2570b57cec5SDimitry Andric explicit sentry(basic_ostream<_CharT, _Traits>& __os); 2580b57cec5SDimitry Andric ~sentry(); 2590eae32dcSDimitry Andric sentry(const sentry&) = delete; 2600eae32dcSDimitry Andric sentry& operator=(const sentry&) = delete; 2610b57cec5SDimitry Andric 2620b57cec5SDimitry Andric _LIBCPP_INLINE_VISIBILITY 263fe6060f1SDimitry Andric explicit operator bool() const {return __ok_;} 2640b57cec5SDimitry Andric}; 2650b57cec5SDimitry Andric 2660b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 2670b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::sentry(basic_ostream<_CharT, _Traits>& __os) 2680b57cec5SDimitry Andric : __ok_(false), 2690b57cec5SDimitry Andric __os_(__os) 2700b57cec5SDimitry Andric{ 2710b57cec5SDimitry Andric if (__os.good()) 2720b57cec5SDimitry Andric { 2730b57cec5SDimitry Andric if (__os.tie()) 2740b57cec5SDimitry Andric __os.tie()->flush(); 2750b57cec5SDimitry Andric __ok_ = true; 2760b57cec5SDimitry Andric } 2770b57cec5SDimitry Andric} 2780b57cec5SDimitry Andric 2790b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 2800b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::sentry::~sentry() 2810b57cec5SDimitry Andric{ 2820b57cec5SDimitry Andric if (__os_.rdbuf() && __os_.good() && (__os_.flags() & ios_base::unitbuf) 2830b57cec5SDimitry Andric && !uncaught_exception()) 2840b57cec5SDimitry Andric { 2850b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 2860b57cec5SDimitry Andric try 2870b57cec5SDimitry Andric { 2880b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 2890b57cec5SDimitry Andric if (__os_.rdbuf()->pubsync() == -1) 2900b57cec5SDimitry Andric __os_.setstate(ios_base::badbit); 2910b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 2920b57cec5SDimitry Andric } 2930b57cec5SDimitry Andric catch (...) 2940b57cec5SDimitry Andric { 2950b57cec5SDimitry Andric } 2960b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 2970b57cec5SDimitry Andric } 2980b57cec5SDimitry Andric} 2990b57cec5SDimitry Andric 3000b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3010b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::basic_ostream(basic_ostream&& __rhs) 3020b57cec5SDimitry Andric{ 3030b57cec5SDimitry Andric this->move(__rhs); 3040b57cec5SDimitry Andric} 3050b57cec5SDimitry Andric 3060b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3070b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3080b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator=(basic_ostream&& __rhs) 3090b57cec5SDimitry Andric{ 3100b57cec5SDimitry Andric swap(__rhs); 3110b57cec5SDimitry Andric return *this; 3120b57cec5SDimitry Andric} 3130b57cec5SDimitry Andric 3140b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3150b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::~basic_ostream() 3160b57cec5SDimitry Andric{ 3170b57cec5SDimitry Andric} 3180b57cec5SDimitry Andric 3190b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3200b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3210b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(basic_streambuf<char_type, traits_type>* __sb) 3220b57cec5SDimitry Andric{ 3230b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3240b57cec5SDimitry Andric try 3250b57cec5SDimitry Andric { 3260b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3270b57cec5SDimitry Andric sentry __s(*this); 3280b57cec5SDimitry Andric if (__s) 3290b57cec5SDimitry Andric { 3300b57cec5SDimitry Andric if (__sb) 3310b57cec5SDimitry Andric { 3320b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3330b57cec5SDimitry Andric try 3340b57cec5SDimitry Andric { 3350b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3360b57cec5SDimitry Andric typedef istreambuf_iterator<_CharT, _Traits> _Ip; 3370b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Op; 3380b57cec5SDimitry Andric _Ip __i(__sb); 3390b57cec5SDimitry Andric _Ip __eof; 3400b57cec5SDimitry Andric _Op __o(*this); 3410b57cec5SDimitry Andric size_t __c = 0; 3420b57cec5SDimitry Andric for (; __i != __eof; ++__i, ++__o, ++__c) 3430b57cec5SDimitry Andric { 3440b57cec5SDimitry Andric *__o = *__i; 3450b57cec5SDimitry Andric if (__o.failed()) 3460b57cec5SDimitry Andric break; 3470b57cec5SDimitry Andric } 3480b57cec5SDimitry Andric if (__c == 0) 3490b57cec5SDimitry Andric this->setstate(ios_base::failbit); 3500b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3510b57cec5SDimitry Andric } 3520b57cec5SDimitry Andric catch (...) 3530b57cec5SDimitry Andric { 3540b57cec5SDimitry Andric this->__set_failbit_and_consider_rethrow(); 3550b57cec5SDimitry Andric } 3560b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3570b57cec5SDimitry Andric } 3580b57cec5SDimitry Andric else 3590b57cec5SDimitry Andric this->setstate(ios_base::badbit); 3600b57cec5SDimitry Andric } 3610b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3620b57cec5SDimitry Andric } 3630b57cec5SDimitry Andric catch (...) 3640b57cec5SDimitry Andric { 3650b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 3660b57cec5SDimitry Andric } 3670b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3680b57cec5SDimitry Andric return *this; 3690b57cec5SDimitry Andric} 3700b57cec5SDimitry Andric 3710b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3720b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3730b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(bool __n) 3740b57cec5SDimitry Andric{ 3750b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3760b57cec5SDimitry Andric try 3770b57cec5SDimitry Andric { 3780b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3790b57cec5SDimitry Andric sentry __s(*this); 3800b57cec5SDimitry Andric if (__s) 3810b57cec5SDimitry Andric { 3820b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 3830b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 3840b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 3850b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 3860b57cec5SDimitry Andric } 3870b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 3880b57cec5SDimitry Andric } 3890b57cec5SDimitry Andric catch (...) 3900b57cec5SDimitry Andric { 3910b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 3920b57cec5SDimitry Andric } 3930b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 3940b57cec5SDimitry Andric return *this; 3950b57cec5SDimitry Andric} 3960b57cec5SDimitry Andric 3970b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 3980b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 3990b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(short __n) 4000b57cec5SDimitry Andric{ 4010b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4020b57cec5SDimitry Andric try 4030b57cec5SDimitry Andric { 4040b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4050b57cec5SDimitry Andric sentry __s(*this); 4060b57cec5SDimitry Andric if (__s) 4070b57cec5SDimitry Andric { 4080b57cec5SDimitry Andric ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 4090b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4100b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4110b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), 4120b57cec5SDimitry Andric __flags == ios_base::oct || __flags == ios_base::hex ? 4130b57cec5SDimitry Andric static_cast<long>(static_cast<unsigned short>(__n)) : 4140b57cec5SDimitry Andric static_cast<long>(__n)).failed()) 4150b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4160b57cec5SDimitry Andric } 4170b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4180b57cec5SDimitry Andric } 4190b57cec5SDimitry Andric catch (...) 4200b57cec5SDimitry Andric { 4210b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4220b57cec5SDimitry Andric } 4230b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4240b57cec5SDimitry Andric return *this; 4250b57cec5SDimitry Andric} 4260b57cec5SDimitry Andric 4270b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4280b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4290b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned short __n) 4300b57cec5SDimitry Andric{ 4310b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4320b57cec5SDimitry Andric try 4330b57cec5SDimitry Andric { 4340b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4350b57cec5SDimitry Andric sentry __s(*this); 4360b57cec5SDimitry Andric if (__s) 4370b57cec5SDimitry Andric { 4380b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4390b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4400b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 4410b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4420b57cec5SDimitry Andric } 4430b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4440b57cec5SDimitry Andric } 4450b57cec5SDimitry Andric catch (...) 4460b57cec5SDimitry Andric { 4470b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4480b57cec5SDimitry Andric } 4490b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4500b57cec5SDimitry Andric return *this; 4510b57cec5SDimitry Andric} 4520b57cec5SDimitry Andric 4530b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4540b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4550b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(int __n) 4560b57cec5SDimitry Andric{ 4570b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4580b57cec5SDimitry Andric try 4590b57cec5SDimitry Andric { 4600b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4610b57cec5SDimitry Andric sentry __s(*this); 4620b57cec5SDimitry Andric if (__s) 4630b57cec5SDimitry Andric { 4640b57cec5SDimitry Andric ios_base::fmtflags __flags = ios_base::flags() & ios_base::basefield; 4650b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4660b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4670b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), 4680b57cec5SDimitry Andric __flags == ios_base::oct || __flags == ios_base::hex ? 4690b57cec5SDimitry Andric static_cast<long>(static_cast<unsigned int>(__n)) : 4700b57cec5SDimitry Andric static_cast<long>(__n)).failed()) 4710b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4720b57cec5SDimitry Andric } 4730b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4740b57cec5SDimitry Andric } 4750b57cec5SDimitry Andric catch (...) 4760b57cec5SDimitry Andric { 4770b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 4780b57cec5SDimitry Andric } 4790b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4800b57cec5SDimitry Andric return *this; 4810b57cec5SDimitry Andric} 4820b57cec5SDimitry Andric 4830b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 4840b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 4850b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned int __n) 4860b57cec5SDimitry Andric{ 4870b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 4880b57cec5SDimitry Andric try 4890b57cec5SDimitry Andric { 4900b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 4910b57cec5SDimitry Andric sentry __s(*this); 4920b57cec5SDimitry Andric if (__s) 4930b57cec5SDimitry Andric { 4940b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 4950b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 4960b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<unsigned long>(__n)).failed()) 4970b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 4980b57cec5SDimitry Andric } 4990b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5000b57cec5SDimitry Andric } 5010b57cec5SDimitry Andric catch (...) 5020b57cec5SDimitry Andric { 5030b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5040b57cec5SDimitry Andric } 5050b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5060b57cec5SDimitry Andric return *this; 5070b57cec5SDimitry Andric} 5080b57cec5SDimitry Andric 5090b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5100b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5110b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long __n) 5120b57cec5SDimitry Andric{ 5130b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5140b57cec5SDimitry Andric try 5150b57cec5SDimitry Andric { 5160b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5170b57cec5SDimitry Andric sentry __s(*this); 5180b57cec5SDimitry Andric if (__s) 5190b57cec5SDimitry Andric { 5200b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5210b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5220b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 5230b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5240b57cec5SDimitry Andric } 5250b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5260b57cec5SDimitry Andric } 5270b57cec5SDimitry Andric catch (...) 5280b57cec5SDimitry Andric { 5290b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5300b57cec5SDimitry Andric } 5310b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5320b57cec5SDimitry Andric return *this; 5330b57cec5SDimitry Andric} 5340b57cec5SDimitry Andric 5350b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5360b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5370b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long __n) 5380b57cec5SDimitry Andric{ 5390b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5400b57cec5SDimitry Andric try 5410b57cec5SDimitry Andric { 5420b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5430b57cec5SDimitry Andric sentry __s(*this); 5440b57cec5SDimitry Andric if (__s) 5450b57cec5SDimitry Andric { 5460b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5470b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5480b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 5490b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5500b57cec5SDimitry Andric } 5510b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5520b57cec5SDimitry Andric } 5530b57cec5SDimitry Andric catch (...) 5540b57cec5SDimitry Andric { 5550b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5560b57cec5SDimitry Andric } 5570b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5580b57cec5SDimitry Andric return *this; 5590b57cec5SDimitry Andric} 5600b57cec5SDimitry Andric 5610b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5620b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5630b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long long __n) 5640b57cec5SDimitry Andric{ 5650b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5660b57cec5SDimitry Andric try 5670b57cec5SDimitry Andric { 5680b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5690b57cec5SDimitry Andric sentry __s(*this); 5700b57cec5SDimitry Andric if (__s) 5710b57cec5SDimitry Andric { 5720b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5730b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 5740b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 5750b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 5760b57cec5SDimitry Andric } 5770b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5780b57cec5SDimitry Andric } 5790b57cec5SDimitry Andric catch (...) 5800b57cec5SDimitry Andric { 5810b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 5820b57cec5SDimitry Andric } 5830b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5840b57cec5SDimitry Andric return *this; 5850b57cec5SDimitry Andric} 5860b57cec5SDimitry Andric 5870b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 5880b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 5890b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(unsigned long long __n) 5900b57cec5SDimitry Andric{ 5910b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 5920b57cec5SDimitry Andric try 5930b57cec5SDimitry Andric { 5940b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 5950b57cec5SDimitry Andric sentry __s(*this); 5960b57cec5SDimitry Andric if (__s) 5970b57cec5SDimitry Andric { 5980b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 5990b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6000b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6010b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6020b57cec5SDimitry Andric } 6030b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6040b57cec5SDimitry Andric } 6050b57cec5SDimitry Andric catch (...) 6060b57cec5SDimitry Andric { 6070b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6080b57cec5SDimitry Andric } 6090b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6100b57cec5SDimitry Andric return *this; 6110b57cec5SDimitry Andric} 6120b57cec5SDimitry Andric 6130b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6140b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6150b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(float __n) 6160b57cec5SDimitry Andric{ 6170b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6180b57cec5SDimitry Andric try 6190b57cec5SDimitry Andric { 6200b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6210b57cec5SDimitry Andric sentry __s(*this); 6220b57cec5SDimitry Andric if (__s) 6230b57cec5SDimitry Andric { 6240b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6250b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6260b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), static_cast<double>(__n)).failed()) 6270b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6280b57cec5SDimitry Andric } 6290b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6300b57cec5SDimitry Andric } 6310b57cec5SDimitry Andric catch (...) 6320b57cec5SDimitry Andric { 6330b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6340b57cec5SDimitry Andric } 6350b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6360b57cec5SDimitry Andric return *this; 6370b57cec5SDimitry Andric} 6380b57cec5SDimitry Andric 6390b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6400b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6410b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(double __n) 6420b57cec5SDimitry Andric{ 6430b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6440b57cec5SDimitry Andric try 6450b57cec5SDimitry Andric { 6460b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6470b57cec5SDimitry Andric sentry __s(*this); 6480b57cec5SDimitry Andric if (__s) 6490b57cec5SDimitry Andric { 6500b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6510b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6520b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6530b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6540b57cec5SDimitry Andric } 6550b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6560b57cec5SDimitry Andric } 6570b57cec5SDimitry Andric catch (...) 6580b57cec5SDimitry Andric { 6590b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6600b57cec5SDimitry Andric } 6610b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6620b57cec5SDimitry Andric return *this; 6630b57cec5SDimitry Andric} 6640b57cec5SDimitry Andric 6650b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6660b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6670b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(long double __n) 6680b57cec5SDimitry Andric{ 6690b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6700b57cec5SDimitry Andric try 6710b57cec5SDimitry Andric { 6720b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6730b57cec5SDimitry Andric sentry __s(*this); 6740b57cec5SDimitry Andric if (__s) 6750b57cec5SDimitry Andric { 6760b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 6770b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 6780b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 6790b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 6800b57cec5SDimitry Andric } 6810b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6820b57cec5SDimitry Andric } 6830b57cec5SDimitry Andric catch (...) 6840b57cec5SDimitry Andric { 6850b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 6860b57cec5SDimitry Andric } 6870b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6880b57cec5SDimitry Andric return *this; 6890b57cec5SDimitry Andric} 6900b57cec5SDimitry Andric 6910b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 6920b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 6930b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::operator<<(const void* __n) 6940b57cec5SDimitry Andric{ 6950b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 6960b57cec5SDimitry Andric try 6970b57cec5SDimitry Andric { 6980b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 6990b57cec5SDimitry Andric sentry __s(*this); 7000b57cec5SDimitry Andric if (__s) 7010b57cec5SDimitry Andric { 7020b57cec5SDimitry Andric typedef num_put<char_type, ostreambuf_iterator<char_type, traits_type> > _Fp; 7030b57cec5SDimitry Andric const _Fp& __f = use_facet<_Fp>(this->getloc()); 7040b57cec5SDimitry Andric if (__f.put(*this, *this, this->fill(), __n).failed()) 7050b57cec5SDimitry Andric this->setstate(ios_base::badbit | ios_base::failbit); 7060b57cec5SDimitry Andric } 7070b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7080b57cec5SDimitry Andric } 7090b57cec5SDimitry Andric catch (...) 7100b57cec5SDimitry Andric { 7110b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 7120b57cec5SDimitry Andric } 7130b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7140b57cec5SDimitry Andric return *this; 7150b57cec5SDimitry Andric} 7160b57cec5SDimitry Andric 7170b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7180b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7190b57cec5SDimitry Andric__put_character_sequence(basic_ostream<_CharT, _Traits>& __os, 7200b57cec5SDimitry Andric const _CharT* __str, size_t __len) 7210b57cec5SDimitry Andric{ 7220b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7230b57cec5SDimitry Andric try 7240b57cec5SDimitry Andric { 7250b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7260b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 7270b57cec5SDimitry Andric if (__s) 7280b57cec5SDimitry Andric { 7290b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 7300b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 7310b57cec5SDimitry Andric __str, 7320b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 7330b57cec5SDimitry Andric __str + __len : 7340b57cec5SDimitry Andric __str, 7350b57cec5SDimitry Andric __str + __len, 7360b57cec5SDimitry Andric __os, 7370b57cec5SDimitry Andric __os.fill()).failed()) 7380b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 7390b57cec5SDimitry Andric } 7400b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7410b57cec5SDimitry Andric } 7420b57cec5SDimitry Andric catch (...) 7430b57cec5SDimitry Andric { 7440b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 7450b57cec5SDimitry Andric } 7460b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7470b57cec5SDimitry Andric return __os; 7480b57cec5SDimitry Andric} 7490b57cec5SDimitry Andric 7500b57cec5SDimitry Andric 7510b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7520b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7530b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) 7540b57cec5SDimitry Andric{ 7550b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, &__c, 1); 7560b57cec5SDimitry Andric} 7570b57cec5SDimitry Andric 7580b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 7590b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 7600b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, char __cn) 7610b57cec5SDimitry Andric{ 7620b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7630b57cec5SDimitry Andric try 7640b57cec5SDimitry Andric { 7650b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7660b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 7670b57cec5SDimitry Andric if (__s) 7680b57cec5SDimitry Andric { 7690b57cec5SDimitry Andric _CharT __c = __os.widen(__cn); 7700b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 7710b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 7720b57cec5SDimitry Andric &__c, 7730b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 7740b57cec5SDimitry Andric &__c + 1 : 7750b57cec5SDimitry Andric &__c, 7760b57cec5SDimitry Andric &__c + 1, 7770b57cec5SDimitry Andric __os, 7780b57cec5SDimitry Andric __os.fill()).failed()) 7790b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 7800b57cec5SDimitry Andric } 7810b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 7820b57cec5SDimitry Andric } 7830b57cec5SDimitry Andric catch (...) 7840b57cec5SDimitry Andric { 7850b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 7860b57cec5SDimitry Andric } 7870b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 7880b57cec5SDimitry Andric return __os; 7890b57cec5SDimitry Andric} 7900b57cec5SDimitry Andric 7910b57cec5SDimitry Andrictemplate<class _Traits> 7920b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 7930b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, char __c) 7940b57cec5SDimitry Andric{ 7950b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, &__c, 1); 7960b57cec5SDimitry Andric} 7970b57cec5SDimitry Andric 7980b57cec5SDimitry Andrictemplate<class _Traits> 7990b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8000b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, signed char __c) 8010b57cec5SDimitry Andric{ 8020b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8030b57cec5SDimitry Andric} 8040b57cec5SDimitry Andric 8050b57cec5SDimitry Andrictemplate<class _Traits> 8060b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8070b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, unsigned char __c) 8080b57cec5SDimitry Andric{ 8090b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, (char *) &__c, 1); 8100b57cec5SDimitry Andric} 8110b57cec5SDimitry Andric 8120b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 8130b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 8140b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str) 8150b57cec5SDimitry Andric{ 8160b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 8170b57cec5SDimitry Andric} 8180b57cec5SDimitry Andric 8190b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 8200b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 8210b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const char* __strn) 8220b57cec5SDimitry Andric{ 8230b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8240b57cec5SDimitry Andric try 8250b57cec5SDimitry Andric { 8260b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8270b57cec5SDimitry Andric typename basic_ostream<_CharT, _Traits>::sentry __s(__os); 8280b57cec5SDimitry Andric if (__s) 8290b57cec5SDimitry Andric { 8300b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Ip; 8310b57cec5SDimitry Andric size_t __len = char_traits<char>::length(__strn); 8320b57cec5SDimitry Andric const int __bs = 100; 8330b57cec5SDimitry Andric _CharT __wbb[__bs]; 8340b57cec5SDimitry Andric _CharT* __wb = __wbb; 8350b57cec5SDimitry Andric unique_ptr<_CharT, void(*)(void*)> __h(0, free); 8360b57cec5SDimitry Andric if (__len > __bs) 8370b57cec5SDimitry Andric { 8380b57cec5SDimitry Andric __wb = (_CharT*)malloc(__len*sizeof(_CharT)); 8390b57cec5SDimitry Andric if (__wb == 0) 8400b57cec5SDimitry Andric __throw_bad_alloc(); 8410b57cec5SDimitry Andric __h.reset(__wb); 8420b57cec5SDimitry Andric } 8430b57cec5SDimitry Andric for (_CharT* __p = __wb; *__strn != '\0'; ++__strn, ++__p) 8440b57cec5SDimitry Andric *__p = __os.widen(*__strn); 8450b57cec5SDimitry Andric if (__pad_and_output(_Ip(__os), 8460b57cec5SDimitry Andric __wb, 8470b57cec5SDimitry Andric (__os.flags() & ios_base::adjustfield) == ios_base::left ? 8480b57cec5SDimitry Andric __wb + __len : 8490b57cec5SDimitry Andric __wb, 8500b57cec5SDimitry Andric __wb + __len, 8510b57cec5SDimitry Andric __os, 8520b57cec5SDimitry Andric __os.fill()).failed()) 8530b57cec5SDimitry Andric __os.setstate(ios_base::badbit | ios_base::failbit); 8540b57cec5SDimitry Andric } 8550b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8560b57cec5SDimitry Andric } 8570b57cec5SDimitry Andric catch (...) 8580b57cec5SDimitry Andric { 8590b57cec5SDimitry Andric __os.__set_badbit_and_consider_rethrow(); 8600b57cec5SDimitry Andric } 8610b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8620b57cec5SDimitry Andric return __os; 8630b57cec5SDimitry Andric} 8640b57cec5SDimitry Andric 8650b57cec5SDimitry Andrictemplate<class _Traits> 8660b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8670b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const char* __str) 8680b57cec5SDimitry Andric{ 8690b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str)); 8700b57cec5SDimitry Andric} 8710b57cec5SDimitry Andric 8720b57cec5SDimitry Andrictemplate<class _Traits> 8730b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8740b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const signed char* __str) 8750b57cec5SDimitry Andric{ 8760b57cec5SDimitry Andric const char *__s = (const char *) __str; 8770b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 8780b57cec5SDimitry Andric} 8790b57cec5SDimitry Andric 8800b57cec5SDimitry Andrictemplate<class _Traits> 8810b57cec5SDimitry Andricbasic_ostream<char, _Traits>& 8820b57cec5SDimitry Andricoperator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str) 8830b57cec5SDimitry Andric{ 8840b57cec5SDimitry Andric const char *__s = (const char *) __str; 8850b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s)); 8860b57cec5SDimitry Andric} 8870b57cec5SDimitry Andric 8880b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 8890b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 8900b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::put(char_type __c) 8910b57cec5SDimitry Andric{ 8920b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 8930b57cec5SDimitry Andric try 8940b57cec5SDimitry Andric { 8950b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 8960b57cec5SDimitry Andric sentry __s(*this); 8970b57cec5SDimitry Andric if (__s) 8980b57cec5SDimitry Andric { 8990b57cec5SDimitry Andric typedef ostreambuf_iterator<_CharT, _Traits> _Op; 9000b57cec5SDimitry Andric _Op __o(*this); 9010b57cec5SDimitry Andric *__o = __c; 9020b57cec5SDimitry Andric if (__o.failed()) 9030b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9040b57cec5SDimitry Andric } 9050b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9060b57cec5SDimitry Andric } 9070b57cec5SDimitry Andric catch (...) 9080b57cec5SDimitry Andric { 9090b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9100b57cec5SDimitry Andric } 9110b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9120b57cec5SDimitry Andric return *this; 9130b57cec5SDimitry Andric} 9140b57cec5SDimitry Andric 9150b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9160b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9170b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::write(const char_type* __s, streamsize __n) 9180b57cec5SDimitry Andric{ 9190b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9200b57cec5SDimitry Andric try 9210b57cec5SDimitry Andric { 9220b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9230b57cec5SDimitry Andric sentry __sen(*this); 9240b57cec5SDimitry Andric if (__sen && __n) 9250b57cec5SDimitry Andric { 9260b57cec5SDimitry Andric if (this->rdbuf()->sputn(__s, __n) != __n) 9270b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9280b57cec5SDimitry Andric } 9290b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9300b57cec5SDimitry Andric } 9310b57cec5SDimitry Andric catch (...) 9320b57cec5SDimitry Andric { 9330b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9340b57cec5SDimitry Andric } 9350b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9360b57cec5SDimitry Andric return *this; 9370b57cec5SDimitry Andric} 9380b57cec5SDimitry Andric 9390b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9400b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9410b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::flush() 9420b57cec5SDimitry Andric{ 9430b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9440b57cec5SDimitry Andric try 9450b57cec5SDimitry Andric { 9460b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9470b57cec5SDimitry Andric if (this->rdbuf()) 9480b57cec5SDimitry Andric { 9490b57cec5SDimitry Andric sentry __s(*this); 9500b57cec5SDimitry Andric if (__s) 9510b57cec5SDimitry Andric { 9520b57cec5SDimitry Andric if (this->rdbuf()->pubsync() == -1) 9530b57cec5SDimitry Andric this->setstate(ios_base::badbit); 9540b57cec5SDimitry Andric } 9550b57cec5SDimitry Andric } 9560b57cec5SDimitry Andric#ifndef _LIBCPP_NO_EXCEPTIONS 9570b57cec5SDimitry Andric } 9580b57cec5SDimitry Andric catch (...) 9590b57cec5SDimitry Andric { 9600b57cec5SDimitry Andric this->__set_badbit_and_consider_rethrow(); 9610b57cec5SDimitry Andric } 9620b57cec5SDimitry Andric#endif // _LIBCPP_NO_EXCEPTIONS 9630b57cec5SDimitry Andric return *this; 9640b57cec5SDimitry Andric} 9650b57cec5SDimitry Andric 9660b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9670b57cec5SDimitry Andrictypename basic_ostream<_CharT, _Traits>::pos_type 9680b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::tellp() 9690b57cec5SDimitry Andric{ 9700b57cec5SDimitry Andric if (this->fail()) 9710b57cec5SDimitry Andric return pos_type(-1); 9720b57cec5SDimitry Andric return this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::out); 9730b57cec5SDimitry Andric} 9740b57cec5SDimitry Andric 9750b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9760b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9770b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(pos_type __pos) 9780b57cec5SDimitry Andric{ 9790b57cec5SDimitry Andric sentry __s(*this); 9800b57cec5SDimitry Andric if (!this->fail()) 9810b57cec5SDimitry Andric { 9820b57cec5SDimitry Andric if (this->rdbuf()->pubseekpos(__pos, ios_base::out) == pos_type(-1)) 9830b57cec5SDimitry Andric this->setstate(ios_base::failbit); 9840b57cec5SDimitry Andric } 9850b57cec5SDimitry Andric return *this; 9860b57cec5SDimitry Andric} 9870b57cec5SDimitry Andric 9880b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 9890b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 9900b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>::seekp(off_type __off, ios_base::seekdir __dir) 9910b57cec5SDimitry Andric{ 9920b57cec5SDimitry Andric sentry __s(*this); 9930b57cec5SDimitry Andric if (!this->fail()) 9940b57cec5SDimitry Andric { 9950b57cec5SDimitry Andric if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::out) == pos_type(-1)) 9960b57cec5SDimitry Andric this->setstate(ios_base::failbit); 9970b57cec5SDimitry Andric } 9980b57cec5SDimitry Andric return *this; 9990b57cec5SDimitry Andric} 10000b57cec5SDimitry Andric 10010b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10025ffd83dbSDimitry Andricinline 10030b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10040b57cec5SDimitry Andricendl(basic_ostream<_CharT, _Traits>& __os) 10050b57cec5SDimitry Andric{ 10060b57cec5SDimitry Andric __os.put(__os.widen('\n')); 10070b57cec5SDimitry Andric __os.flush(); 10080b57cec5SDimitry Andric return __os; 10090b57cec5SDimitry Andric} 10100b57cec5SDimitry Andric 10110b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10125ffd83dbSDimitry Andricinline 10130b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10140b57cec5SDimitry Andricends(basic_ostream<_CharT, _Traits>& __os) 10150b57cec5SDimitry Andric{ 10160b57cec5SDimitry Andric __os.put(_CharT()); 10170b57cec5SDimitry Andric return __os; 10180b57cec5SDimitry Andric} 10190b57cec5SDimitry Andric 10200b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10215ffd83dbSDimitry Andricinline 10220b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10230b57cec5SDimitry Andricflush(basic_ostream<_CharT, _Traits>& __os) 10240b57cec5SDimitry Andric{ 10250b57cec5SDimitry Andric __os.flush(); 10260b57cec5SDimitry Andric return __os; 10270b57cec5SDimitry Andric} 10280b57cec5SDimitry Andric 1029e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = void> 1030e8d8bef9SDimitry Andricstruct __is_ostreamable : false_type { }; 1031e8d8bef9SDimitry Andric 10320b57cec5SDimitry Andrictemplate <class _Stream, class _Tp> 1033e8d8bef9SDimitry Andricstruct __is_ostreamable<_Stream, _Tp, decltype( 1034fe6060f1SDimitry Andric declval<_Stream>() << declval<_Tp>(), void() 1035e8d8bef9SDimitry Andric)> : true_type { }; 1036e8d8bef9SDimitry Andric 1037e8d8bef9SDimitry Andrictemplate <class _Stream, class _Tp, class = typename enable_if< 1038e8d8bef9SDimitry Andric _And<is_base_of<ios_base, _Stream>, 1039e8d8bef9SDimitry Andric __is_ostreamable<_Stream&, const _Tp&> >::value 1040e8d8bef9SDimitry Andric>::type> 1041e8d8bef9SDimitry Andric_LIBCPP_INLINE_VISIBILITY 1042e8d8bef9SDimitry Andric_Stream&& operator<<(_Stream&& __os, const _Tp& __x) 10430b57cec5SDimitry Andric{ 10440b57cec5SDimitry Andric __os << __x; 10450b57cec5SDimitry Andric return _VSTD::move(__os); 10460b57cec5SDimitry Andric} 10470b57cec5SDimitry Andric 10480b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Allocator> 10490b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10500b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, 10510b57cec5SDimitry Andric const basic_string<_CharT, _Traits, _Allocator>& __str) 10520b57cec5SDimitry Andric{ 10530b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __str.data(), __str.size()); 10540b57cec5SDimitry Andric} 10550b57cec5SDimitry Andric 10560b57cec5SDimitry Andrictemplate<class _CharT, class _Traits> 10570b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10580b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, 1059e40139ffSDimitry Andric basic_string_view<_CharT, _Traits> __sv) 10600b57cec5SDimitry Andric{ 10610b57cec5SDimitry Andric return _VSTD::__put_character_sequence(__os, __sv.data(), __sv.size()); 10620b57cec5SDimitry Andric} 10630b57cec5SDimitry Andric 10640b57cec5SDimitry Andrictemplate <class _CharT, class _Traits> 10650b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 10660b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10670b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const error_code& __ec) 10680b57cec5SDimitry Andric{ 10690b57cec5SDimitry Andric return __os << __ec.category().name() << ':' << __ec.value(); 10700b57cec5SDimitry Andric} 10710b57cec5SDimitry Andric 10720b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp> 10730b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 10740b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10750b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, shared_ptr<_Yp> const& __p) 10760b57cec5SDimitry Andric{ 10770b57cec5SDimitry Andric return __os << __p.get(); 10780b57cec5SDimitry Andric} 10790b57cec5SDimitry Andric 10800b57cec5SDimitry Andrictemplate<class _CharT, class _Traits, class _Yp, class _Dp> 10810b57cec5SDimitry Andricinline _LIBCPP_INLINE_VISIBILITY 10820b57cec5SDimitry Andrictypename enable_if 10830b57cec5SDimitry Andric< 10840b57cec5SDimitry Andric is_same<void, typename __void_t<decltype((declval<basic_ostream<_CharT, _Traits>&>() << declval<typename unique_ptr<_Yp, _Dp>::pointer>()))>::type>::value, 10850b57cec5SDimitry Andric basic_ostream<_CharT, _Traits>& 10860b57cec5SDimitry Andric>::type 10870b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, unique_ptr<_Yp, _Dp> const& __p) 10880b57cec5SDimitry Andric{ 10890b57cec5SDimitry Andric return __os << __p.get(); 10900b57cec5SDimitry Andric} 10910b57cec5SDimitry Andric 10920b57cec5SDimitry Andrictemplate <class _CharT, class _Traits, size_t _Size> 10930b57cec5SDimitry Andricbasic_ostream<_CharT, _Traits>& 10940b57cec5SDimitry Andricoperator<<(basic_ostream<_CharT, _Traits>& __os, const bitset<_Size>& __x) 10950b57cec5SDimitry Andric{ 10960b57cec5SDimitry Andric return __os << __x.template to_string<_CharT, _Traits> 10970b57cec5SDimitry Andric (use_facet<ctype<_CharT> >(__os.getloc()).widen('0'), 10980b57cec5SDimitry Andric use_facet<ctype<_CharT> >(__os.getloc()).widen('1')); 10990b57cec5SDimitry Andric} 11000b57cec5SDimitry Andric 1101*81ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<char>; 1102349cc55cSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 1103*81ad6265SDimitry Andricextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ostream<wchar_t>; 1104349cc55cSDimitry Andric#endif 11050b57cec5SDimitry Andric 11060b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD 11070b57cec5SDimitry Andric 11080b57cec5SDimitry Andric#endif // _LIBCPP_OSTREAM 1109