[gn build] Port 077cc3deeebe
[llvm-project.git] / libcxx / include / ostream
blob900863c035be7dd76931e0d947151e4afeb6916b
1 // -*- C++ -*-
2 //===----------------------------------------------------------------------===//
3 //
4 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5 // See https://llvm.org/LICENSE.txt for license information.
6 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //
8 //===----------------------------------------------------------------------===//
10 #ifndef _LIBCPP_OSTREAM
11 #define _LIBCPP_OSTREAM
14     ostream synopsis
16 template <class charT, class traits = char_traits<charT> >
17 class basic_ostream
18     : virtual public basic_ios<charT,traits>
20 public:
21     // types (inherited from basic_ios (27.5.4)):
22     typedef charT                          char_type;
23     typedef traits                         traits_type;
24     typedef typename traits_type::int_type int_type;
25     typedef typename traits_type::pos_type pos_type;
26     typedef typename traits_type::off_type off_type;
28     // 27.7.2.2 Constructor/destructor:
29     explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
30     basic_ostream(basic_ostream&& rhs);
31     virtual ~basic_ostream();
33     // 27.7.2.3 Assign/swap
34     basic_ostream& operator=(const basic_ostream& rhs) = delete; // C++14
35     basic_ostream& operator=(basic_ostream&& rhs);
36     void swap(basic_ostream& rhs);
38     // 27.7.2.4 Prefix/suffix:
39     class sentry;
41     // 27.7.2.6 Formatted output:
42     basic_ostream& operator<<(basic_ostream& (*pf)(basic_ostream&));
43     basic_ostream& operator<<(basic_ios<charT, traits>& (*pf)(basic_ios<charT,traits>&));
44     basic_ostream& operator<<(ios_base& (*pf)(ios_base&));
45     basic_ostream& operator<<(bool n);
46     basic_ostream& operator<<(short n);
47     basic_ostream& operator<<(unsigned short n);
48     basic_ostream& operator<<(int n);
49     basic_ostream& operator<<(unsigned int n);
50     basic_ostream& operator<<(long n);
51     basic_ostream& operator<<(unsigned long n);
52     basic_ostream& operator<<(long long n);
53     basic_ostream& operator<<(unsigned long long n);
54     basic_ostream& operator<<(float f);
55     basic_ostream& operator<<(double f);
56     basic_ostream& operator<<(long double f);
57     basic_ostream& operator<<(const void* p);
58     basic_ostream& operator<<(const volatile void* val); // C++23
59     basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
60     basic_ostream& operator<<(nullptr_t);
62     // 27.7.2.7 Unformatted output:
63     basic_ostream& put(char_type c);
64     basic_ostream& write(const char_type* s, streamsize n);
65     basic_ostream& flush();
67     // 27.7.2.5 seeks:
68     pos_type tellp();
69     basic_ostream& seekp(pos_type);
70     basic_ostream& seekp(off_type, ios_base::seekdir);
71 protected:
72     basic_ostream(const basic_ostream& rhs) = delete;
73     basic_ostream(basic_ostream&& rhs);
74     // 27.7.3.3 Assign/swap
75     basic_ostream& operator=(basic_ostream& rhs) = delete;
76     basic_ostream& operator=(const basic_ostream&& rhs);
77     void swap(basic_ostream& rhs);
80 // 27.7.2.6.4 character inserters
82 template<class charT, class traits>
83   basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, charT);
85 template<class charT, class traits>
86   basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, char);
88 template<class traits>
89   basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, char);
91 // signed and unsigned
93 template<class traits>
94   basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, signed char);
96 template<class traits>
97   basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, unsigned char);
99 // NTBS
100 template<class charT, class traits>
101   basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const charT*);
103 template<class charT, class traits>
104   basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&, const char*);
106 template<class traits>
107   basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const char*);
109 // signed and unsigned
110 template<class traits>
111 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const signed char*);
113 template<class traits>
114   basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&, const unsigned char*);
116 // swap:
117 template <class charT, class traits>
118   void swap(basic_ostream<charT, traits>& x, basic_ostream<charT, traits>& y);
120 template <class charT, class traits>
121   basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
123 template <class charT, class traits>
124   basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
126 template <class charT, class traits>
127   basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
129 // rvalue stream insertion
130 template <class Stream, class T>
131   Stream&& operator<<(Stream&& os, const T& x);
133 template<class traits>
134 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, wchar_t) = delete;               // since C++20
135 template<class traits>
136 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char8_t) = delete;               // since C++20
137 template<class traits>
138 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char16_t) = delete;              // since C++20
139 template<class traits>
140 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, char32_t) = delete;              // since C++20
141 template<class traits>
142 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char8_t) = delete;         // since C++20
143 template<class traits>
144 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char16_t) = delete;        // since C++20
145 template<class traits>
146 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, char32_t) = delete;        // since C++20
147 template<class traits>
148 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const wchar_t*) = delete;        // since C++20
149 template<class traits>
150 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char8_t*) = delete;        // since C++20
151 template<class traits>
152 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char16_t*) = delete;       // since C++20
153 template<class traits>
154 basic_ostream<char, traits>& operator<<(basic_ostream<char, traits>&, const char32_t*) = delete;       // since C++20
155 template<class traits>
156 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char8_t*) = delete;  // since C++20
157 template<class traits>
158 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char16_t*) = delete; // since C++20
159 template<class traits>
160 basic_ostream<wchar_t, traits>& operator<<(basic_ostream<wchar_t, traits>&, const char32_t*) = delete; // since C++20
162 // [ostream.formatted.print], print functions
163 template<class... Args>                                                                                // since C++23
164   void print(ostream& os, format_string<Args...> fmt, Args&&... args);
165 template<class... Args>                                                                                // since C++23
166   void println(ostream& os, format_string<Args...> fmt, Args&&... args);
167 void println(ostream& os);                                                                             // since C++26
169 void vprint_unicode(ostream& os, string_view fmt, format_args args);                                   // since C++23
170 void vprint_nonunicode(ostream& os, string_view fmt, format_args args);                                // since C++23
171 }  // std
175 #if 0
176 #else // 0
177 #  include <__config>
179 #  if _LIBCPP_HAS_LOCALIZATION
181 #    include <__ostream/basic_ostream.h>
183 #    if _LIBCPP_STD_VER >= 23
184 #      include <__ostream/print.h>
185 #    endif
187 #    include <version>
189 #    if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
190 #      pragma GCC system_header
191 #    endif
193 #  endif // _LIBCPP_HAS_LOCALIZATION
195 #  if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
196 #    include <atomic>
197 #    include <concepts>
198 #    include <cstdio>
199 #    include <cstdlib>
200 #    include <format>
201 #    include <iosfwd>
202 #    include <iterator>
203 #    include <print>
204 #    include <stdexcept>
205 #    include <type_traits>
206 #  endif
207 #endif // 0
209 #endif // _LIBCPP_OSTREAM