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 133fcaf7f86SDimitry Andrictemplate<class traits> 134fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete; // since C++20 135fcaf7f86SDimitry Andrictemplate<class traits> 136fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete; // since C++20 137fcaf7f86SDimitry Andrictemplate<class traits> 138fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete; // since C++20 139fcaf7f86SDimitry Andrictemplate<class traits> 140fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete; // since C++20 141fcaf7f86SDimitry Andrictemplate<class traits> 142fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete; // since C++20 143fcaf7f86SDimitry Andrictemplate<class traits> 144fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete; // since C++20 145fcaf7f86SDimitry Andrictemplate<class traits> 146fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete; // since C++20 147fcaf7f86SDimitry Andrictemplate<class traits> 148fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete; // since C++20 149fcaf7f86SDimitry Andrictemplate<class traits> 150fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete; // since C++20 151fcaf7f86SDimitry Andrictemplate<class traits> 152fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete; // since C++20 153fcaf7f86SDimitry Andrictemplate<class traits> 154fcaf7f86SDimitry Andricbasic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete; // since C++20 155fcaf7f86SDimitry Andrictemplate<class traits> 156fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete; // since C++20 157fcaf7f86SDimitry Andrictemplate<class traits> 158fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20 159fcaf7f86SDimitry Andrictemplate<class traits> 160fcaf7f86SDimitry Andricbasic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20 161fcaf7f86SDimitry Andric 162cb14a3feSDimitry Andric// [ostream.formatted.print], print functions 163cb14a3feSDimitry Andrictemplate<class... Args> // since C++23 164cb14a3feSDimitry Andric void print(ostream& os, format_string<Args...> fmt, Args&&... args); 165cb14a3feSDimitry Andrictemplate<class... Args> // since C++23 166cb14a3feSDimitry Andric void println(ostream& os, format_string<Args...> fmt, Args&&... args); 167*0fca6ea1SDimitry Andricvoid println(ostream& os); // since C++26 168cb14a3feSDimitry Andric 169cb14a3feSDimitry Andricvoid vprint_unicode(ostream& os, string_view fmt, format_args args); // since C++23 170cb14a3feSDimitry Andricvoid vprint_nonunicode(ostream& os, string_view fmt, format_args args); // since C++23 1710b57cec5SDimitry Andric} // std 1720b57cec5SDimitry Andric 1730b57cec5SDimitry Andric*/ 1740b57cec5SDimitry Andric 1750b57cec5SDimitry Andric#include <__config> 176*0fca6ea1SDimitry Andric 177*0fca6ea1SDimitry Andric#include <__ostream/basic_ostream.h> 178*0fca6ea1SDimitry Andric 179*0fca6ea1SDimitry Andric#if _LIBCPP_STD_VER >= 23 180*0fca6ea1SDimitry Andric# include <__ostream/print.h> 181*0fca6ea1SDimitry Andric#endif 182*0fca6ea1SDimitry Andric 1830b57cec5SDimitry Andric#include <version> 1840b57cec5SDimitry Andric 1850b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 1860b57cec5SDimitry Andric# pragma GCC system_header 1870b57cec5SDimitry Andric#endif 1880b57cec5SDimitry Andric 189bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 19006c3fb27SDimitry Andric# include <atomic> 191bdd1243dSDimitry Andric# include <concepts> 192*0fca6ea1SDimitry Andric# include <cstdio> 19306c3fb27SDimitry Andric# include <cstdlib> 194*0fca6ea1SDimitry Andric# include <format> 1955f757f3fSDimitry Andric# include <iosfwd> 196bdd1243dSDimitry Andric# include <iterator> 197*0fca6ea1SDimitry Andric# include <print> 1985f757f3fSDimitry Andric# include <stdexcept> 199bdd1243dSDimitry Andric# include <type_traits> 200bdd1243dSDimitry Andric#endif 201bdd1243dSDimitry Andric 2020b57cec5SDimitry Andric#endif // _LIBCPP_OSTREAM 203