xref: /freebsd/contrib/llvm-project/libcxx/include/ostream (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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