xref: /llvm-project/libcxx/include/__cxx03/ios (revision ce7771902dc50d900de639d499a60486b83f70e0)
1e78f53d1SNikolas Klauser// -*- C++ -*-
2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
3e78f53d1SNikolas Klauser//
4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information.
6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7e78f53d1SNikolas Klauser//
8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===//
9e78f53d1SNikolas Klauser
10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_IOS
11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_IOS
12e78f53d1SNikolas Klauser
13e78f53d1SNikolas Klauser/*
14e78f53d1SNikolas Klauser    ios synopsis
15e78f53d1SNikolas Klauser
1673fbae83SNikolas Klauser#include <__cxx03/iosfwd>
17e78f53d1SNikolas Klauser
18e78f53d1SNikolas Klausernamespace std
19e78f53d1SNikolas Klauser{
20e78f53d1SNikolas Klauser
21e78f53d1SNikolas Klausertypedef OFF_T streamoff;
22e78f53d1SNikolas Klausertypedef SZ_T streamsize;
23e78f53d1SNikolas Klausertemplate <class stateT> class fpos;
24e78f53d1SNikolas Klauser
25e78f53d1SNikolas Klauserclass ios_base
26e78f53d1SNikolas Klauser{
27e78f53d1SNikolas Klauserpublic:
28e78f53d1SNikolas Klauser    class failure;
29e78f53d1SNikolas Klauser
30e78f53d1SNikolas Klauser    typedef T1 fmtflags;
31e78f53d1SNikolas Klauser    static constexpr fmtflags boolalpha;
32e78f53d1SNikolas Klauser    static constexpr fmtflags dec;
33e78f53d1SNikolas Klauser    static constexpr fmtflags fixed;
34e78f53d1SNikolas Klauser    static constexpr fmtflags hex;
35e78f53d1SNikolas Klauser    static constexpr fmtflags internal;
36e78f53d1SNikolas Klauser    static constexpr fmtflags left;
37e78f53d1SNikolas Klauser    static constexpr fmtflags oct;
38e78f53d1SNikolas Klauser    static constexpr fmtflags right;
39e78f53d1SNikolas Klauser    static constexpr fmtflags scientific;
40e78f53d1SNikolas Klauser    static constexpr fmtflags showbase;
41e78f53d1SNikolas Klauser    static constexpr fmtflags showpoint;
42e78f53d1SNikolas Klauser    static constexpr fmtflags showpos;
43e78f53d1SNikolas Klauser    static constexpr fmtflags skipws;
44e78f53d1SNikolas Klauser    static constexpr fmtflags unitbuf;
45e78f53d1SNikolas Klauser    static constexpr fmtflags uppercase;
46e78f53d1SNikolas Klauser    static constexpr fmtflags adjustfield;
47e78f53d1SNikolas Klauser    static constexpr fmtflags basefield;
48e78f53d1SNikolas Klauser    static constexpr fmtflags floatfield;
49e78f53d1SNikolas Klauser
50e78f53d1SNikolas Klauser    typedef T2 iostate;
51e78f53d1SNikolas Klauser    static constexpr iostate badbit;
52e78f53d1SNikolas Klauser    static constexpr iostate eofbit;
53e78f53d1SNikolas Klauser    static constexpr iostate failbit;
54e78f53d1SNikolas Klauser    static constexpr iostate goodbit;
55e78f53d1SNikolas Klauser
56e78f53d1SNikolas Klauser    typedef T3 openmode;
57e78f53d1SNikolas Klauser    static constexpr openmode app;
58e78f53d1SNikolas Klauser    static constexpr openmode ate;
59e78f53d1SNikolas Klauser    static constexpr openmode binary;
60e78f53d1SNikolas Klauser    static constexpr openmode in;
61e78f53d1SNikolas Klauser    static constexpr openmode noreplace; // since C++23
62e78f53d1SNikolas Klauser    static constexpr openmode out;
63e78f53d1SNikolas Klauser    static constexpr openmode trunc;
64e78f53d1SNikolas Klauser
65e78f53d1SNikolas Klauser    typedef T4 seekdir;
66e78f53d1SNikolas Klauser    static constexpr seekdir beg;
67e78f53d1SNikolas Klauser    static constexpr seekdir cur;
68e78f53d1SNikolas Klauser    static constexpr seekdir end;
69e78f53d1SNikolas Klauser
70e78f53d1SNikolas Klauser    class Init;
71e78f53d1SNikolas Klauser
72e78f53d1SNikolas Klauser    // 27.5.2.2 fmtflags state:
73e78f53d1SNikolas Klauser    fmtflags flags() const;
74e78f53d1SNikolas Klauser    fmtflags flags(fmtflags fmtfl);
75e78f53d1SNikolas Klauser    fmtflags setf(fmtflags fmtfl);
76e78f53d1SNikolas Klauser    fmtflags setf(fmtflags fmtfl, fmtflags mask);
77e78f53d1SNikolas Klauser    void unsetf(fmtflags mask);
78e78f53d1SNikolas Klauser
79e78f53d1SNikolas Klauser    streamsize precision() const;
80e78f53d1SNikolas Klauser    streamsize precision(streamsize prec);
81e78f53d1SNikolas Klauser    streamsize width() const;
82e78f53d1SNikolas Klauser    streamsize width(streamsize wide);
83e78f53d1SNikolas Klauser
84e78f53d1SNikolas Klauser    // 27.5.2.3 locales:
85e78f53d1SNikolas Klauser    locale imbue(const locale& loc);
86e78f53d1SNikolas Klauser    locale getloc() const;
87e78f53d1SNikolas Klauser
88e78f53d1SNikolas Klauser    // 27.5.2.5 storage:
89e78f53d1SNikolas Klauser    static int xalloc();
90e78f53d1SNikolas Klauser    long& iword(int index);
91e78f53d1SNikolas Klauser    void*& pword(int index);
92e78f53d1SNikolas Klauser
93e78f53d1SNikolas Klauser    // destructor
94e78f53d1SNikolas Klauser    virtual ~ios_base();
95e78f53d1SNikolas Klauser
96e78f53d1SNikolas Klauser    // 27.5.2.6 callbacks;
97e78f53d1SNikolas Klauser    enum event { erase_event, imbue_event, copyfmt_event };
98e78f53d1SNikolas Klauser    typedef void (*event_callback)(event, ios_base&, int index);
99e78f53d1SNikolas Klauser    void register_callback(event_callback fn, int index);
100e78f53d1SNikolas Klauser
101e78f53d1SNikolas Klauser    ios_base(const ios_base&) = delete;
102e78f53d1SNikolas Klauser    ios_base& operator=(const ios_base&) = delete;
103e78f53d1SNikolas Klauser
104e78f53d1SNikolas Klauser    static bool sync_with_stdio(bool sync = true);
105e78f53d1SNikolas Klauser
106e78f53d1SNikolas Klauserprotected:
107e78f53d1SNikolas Klauser    ios_base();
108e78f53d1SNikolas Klauser};
109e78f53d1SNikolas Klauser
110e78f53d1SNikolas Klausertemplate <class charT, class traits = char_traits<charT> >
111e78f53d1SNikolas Klauserclass basic_ios
112e78f53d1SNikolas Klauser    : public ios_base
113e78f53d1SNikolas Klauser{
114e78f53d1SNikolas Klauserpublic:
115e78f53d1SNikolas Klauser    // types:
116e78f53d1SNikolas Klauser    typedef charT char_type;
117e78f53d1SNikolas Klauser    typedef typename traits::int_type int_type;  // removed in C++17
118e78f53d1SNikolas Klauser    typedef typename traits::pos_type pos_type;  // removed in C++17
119e78f53d1SNikolas Klauser    typedef typename traits::off_type off_type;  // removed in C++17
120e78f53d1SNikolas Klauser    typedef traits traits_type;
121e78f53d1SNikolas Klauser
122e78f53d1SNikolas Klauser    operator unspecified-bool-type() const;
123e78f53d1SNikolas Klauser    bool operator!() const;
124e78f53d1SNikolas Klauser    iostate rdstate() const;
125e78f53d1SNikolas Klauser    void clear(iostate state = goodbit);
126e78f53d1SNikolas Klauser    void setstate(iostate state);
127e78f53d1SNikolas Klauser    bool good() const;
128e78f53d1SNikolas Klauser    bool eof() const;
129e78f53d1SNikolas Klauser    bool fail() const;
130e78f53d1SNikolas Klauser    bool bad() const;
131e78f53d1SNikolas Klauser
132e78f53d1SNikolas Klauser    iostate exceptions() const;
133e78f53d1SNikolas Klauser    void exceptions(iostate except);
134e78f53d1SNikolas Klauser
135e78f53d1SNikolas Klauser    // 27.5.4.1 Constructor/destructor:
136e78f53d1SNikolas Klauser    explicit basic_ios(basic_streambuf<charT,traits>* sb);
137e78f53d1SNikolas Klauser    virtual ~basic_ios();
138e78f53d1SNikolas Klauser
139e78f53d1SNikolas Klauser    // 27.5.4.2 Members:
140e78f53d1SNikolas Klauser    basic_ostream<charT,traits>* tie() const;
141e78f53d1SNikolas Klauser    basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr);
142e78f53d1SNikolas Klauser
143e78f53d1SNikolas Klauser    basic_streambuf<charT,traits>* rdbuf() const;
144e78f53d1SNikolas Klauser    basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb);
145e78f53d1SNikolas Klauser
146e78f53d1SNikolas Klauser    basic_ios& copyfmt(const basic_ios& rhs);
147e78f53d1SNikolas Klauser
148e78f53d1SNikolas Klauser    char_type fill() const;
149e78f53d1SNikolas Klauser    char_type fill(char_type ch);
150e78f53d1SNikolas Klauser
151e78f53d1SNikolas Klauser    locale imbue(const locale& loc);
152e78f53d1SNikolas Klauser
153e78f53d1SNikolas Klauser    char narrow(char_type c, char dfault) const;
154e78f53d1SNikolas Klauser    char_type widen(char c) const;
155e78f53d1SNikolas Klauser
156e78f53d1SNikolas Klauser    basic_ios(const basic_ios& ) = delete;
157e78f53d1SNikolas Klauser    basic_ios& operator=(const basic_ios&) = delete;
158e78f53d1SNikolas Klauser
159e78f53d1SNikolas Klauserprotected:
160e78f53d1SNikolas Klauser    basic_ios();
161e78f53d1SNikolas Klauser    void init(basic_streambuf<charT,traits>* sb);
162e78f53d1SNikolas Klauser    void move(basic_ios& rhs);
163e78f53d1SNikolas Klauser    void swap(basic_ios& rhs) noexcept;
164e78f53d1SNikolas Klauser    void set_rdbuf(basic_streambuf<charT, traits>* sb);
165e78f53d1SNikolas Klauser};
166e78f53d1SNikolas Klauser
167e78f53d1SNikolas Klauser// 27.5.5, manipulators:
168e78f53d1SNikolas Klauserios_base& boolalpha (ios_base& str);
169e78f53d1SNikolas Klauserios_base& noboolalpha(ios_base& str);
170e78f53d1SNikolas Klauserios_base& showbase (ios_base& str);
171e78f53d1SNikolas Klauserios_base& noshowbase (ios_base& str);
172e78f53d1SNikolas Klauserios_base& showpoint (ios_base& str);
173e78f53d1SNikolas Klauserios_base& noshowpoint(ios_base& str);
174e78f53d1SNikolas Klauserios_base& showpos (ios_base& str);
175e78f53d1SNikolas Klauserios_base& noshowpos (ios_base& str);
176e78f53d1SNikolas Klauserios_base& skipws (ios_base& str);
177e78f53d1SNikolas Klauserios_base& noskipws (ios_base& str);
178e78f53d1SNikolas Klauserios_base& uppercase (ios_base& str);
179e78f53d1SNikolas Klauserios_base& nouppercase(ios_base& str);
180e78f53d1SNikolas Klauserios_base& unitbuf (ios_base& str);
181e78f53d1SNikolas Klauserios_base& nounitbuf (ios_base& str);
182e78f53d1SNikolas Klauser
183e78f53d1SNikolas Klauser// 27.5.5.2 adjustfield:
184e78f53d1SNikolas Klauserios_base& internal (ios_base& str);
185e78f53d1SNikolas Klauserios_base& left (ios_base& str);
186e78f53d1SNikolas Klauserios_base& right (ios_base& str);
187e78f53d1SNikolas Klauser
188e78f53d1SNikolas Klauser// 27.5.5.3 basefield:
189e78f53d1SNikolas Klauserios_base& dec (ios_base& str);
190e78f53d1SNikolas Klauserios_base& hex (ios_base& str);
191e78f53d1SNikolas Klauserios_base& oct (ios_base& str);
192e78f53d1SNikolas Klauser
193e78f53d1SNikolas Klauser// 27.5.5.4 floatfield:
194e78f53d1SNikolas Klauserios_base& fixed (ios_base& str);
195e78f53d1SNikolas Klauserios_base& scientific (ios_base& str);
196e78f53d1SNikolas Klauserios_base& hexfloat (ios_base& str);
197e78f53d1SNikolas Klauserios_base& defaultfloat(ios_base& str);
198e78f53d1SNikolas Klauser
199e78f53d1SNikolas Klauser// 27.5.5.5 error reporting:
200e78f53d1SNikolas Klauserenum class io_errc
201e78f53d1SNikolas Klauser{
202e78f53d1SNikolas Klauser    stream = 1
203e78f53d1SNikolas Klauser};
204e78f53d1SNikolas Klauser
205e78f53d1SNikolas Klauserconcept_map ErrorCodeEnum<io_errc> { };
206e78f53d1SNikolas Klausererror_code make_error_code(io_errc e) noexcept;
207e78f53d1SNikolas Klausererror_condition make_error_condition(io_errc e) noexcept;
208e78f53d1SNikolas Klauserstorage-class-specifier const error_category& iostream_category() noexcept;
209e78f53d1SNikolas Klauser
210e78f53d1SNikolas Klauser}  // std
211e78f53d1SNikolas Klauser
212e78f53d1SNikolas Klauser*/
213e78f53d1SNikolas Klauser
21473fbae83SNikolas Klauser#include <__cxx03/__config>
215e78f53d1SNikolas Klauser
216e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_LOCALIZATION)
217e78f53d1SNikolas Klauser
21873fbae83SNikolas Klauser#  include <__cxx03/__fwd/ios.h>
21973fbae83SNikolas Klauser#  include <__cxx03/__ios/fpos.h>
22073fbae83SNikolas Klauser#  include <__cxx03/__locale>
22173fbae83SNikolas Klauser#  include <__cxx03/__system_error/error_category.h>
22273fbae83SNikolas Klauser#  include <__cxx03/__system_error/error_code.h>
22373fbae83SNikolas Klauser#  include <__cxx03/__system_error/error_condition.h>
22473fbae83SNikolas Klauser#  include <__cxx03/__system_error/system_error.h>
22573fbae83SNikolas Klauser#  include <__cxx03/__utility/swap.h>
22673fbae83SNikolas Klauser#  include <__cxx03/__verbose_abort>
22773fbae83SNikolas Klauser#  include <__cxx03/version>
228e78f53d1SNikolas Klauser
229e78f53d1SNikolas Klauser// standard-mandated includes
230e78f53d1SNikolas Klauser
231e78f53d1SNikolas Klauser// [ios.syn]
23273fbae83SNikolas Klauser#  include <__cxx03/iosfwd>
233e78f53d1SNikolas Klauser
234e78f53d1SNikolas Klauser#  if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
23573fbae83SNikolas Klauser#    include <__cxx03/__atomic/atomic.h> // for __xindex_
236e78f53d1SNikolas Klauser#  endif
237e78f53d1SNikolas Klauser
238e78f53d1SNikolas Klauser#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
239e78f53d1SNikolas Klauser#    pragma GCC system_header
240e78f53d1SNikolas Klauser#  endif
241e78f53d1SNikolas Klauser
242e78f53d1SNikolas Klauser_LIBCPP_PUSH_MACROS
24373fbae83SNikolas Klauser#  include <__cxx03/__undef_macros>
244e78f53d1SNikolas Klauser
245e78f53d1SNikolas Klauser_LIBCPP_BEGIN_NAMESPACE_STD
246e78f53d1SNikolas Klauser
247e78f53d1SNikolas Klausertypedef ptrdiff_t streamsize;
248e78f53d1SNikolas Klauser
249e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base {
250e78f53d1SNikolas Klauserpublic:
251e78f53d1SNikolas Klauser  class _LIBCPP_EXPORTED_FROM_ABI failure;
252e78f53d1SNikolas Klauser
253e78f53d1SNikolas Klauser  typedef unsigned int fmtflags;
254e78f53d1SNikolas Klauser  static const fmtflags boolalpha   = 0x0001;
255e78f53d1SNikolas Klauser  static const fmtflags dec         = 0x0002;
256e78f53d1SNikolas Klauser  static const fmtflags fixed       = 0x0004;
257e78f53d1SNikolas Klauser  static const fmtflags hex         = 0x0008;
258e78f53d1SNikolas Klauser  static const fmtflags internal    = 0x0010;
259e78f53d1SNikolas Klauser  static const fmtflags left        = 0x0020;
260e78f53d1SNikolas Klauser  static const fmtflags oct         = 0x0040;
261e78f53d1SNikolas Klauser  static const fmtflags right       = 0x0080;
262e78f53d1SNikolas Klauser  static const fmtflags scientific  = 0x0100;
263e78f53d1SNikolas Klauser  static const fmtflags showbase    = 0x0200;
264e78f53d1SNikolas Klauser  static const fmtflags showpoint   = 0x0400;
265e78f53d1SNikolas Klauser  static const fmtflags showpos     = 0x0800;
266e78f53d1SNikolas Klauser  static const fmtflags skipws      = 0x1000;
267e78f53d1SNikolas Klauser  static const fmtflags unitbuf     = 0x2000;
268e78f53d1SNikolas Klauser  static const fmtflags uppercase   = 0x4000;
269e78f53d1SNikolas Klauser  static const fmtflags adjustfield = left | right | internal;
270e78f53d1SNikolas Klauser  static const fmtflags basefield   = dec | oct | hex;
271e78f53d1SNikolas Klauser  static const fmtflags floatfield  = scientific | fixed;
272e78f53d1SNikolas Klauser
273e78f53d1SNikolas Klauser  typedef unsigned int iostate;
274e78f53d1SNikolas Klauser  static const iostate badbit  = 0x1;
275e78f53d1SNikolas Klauser  static const iostate eofbit  = 0x2;
276e78f53d1SNikolas Klauser  static const iostate failbit = 0x4;
277e78f53d1SNikolas Klauser  static const iostate goodbit = 0x0;
278e78f53d1SNikolas Klauser
279e78f53d1SNikolas Klauser  typedef unsigned int openmode;
280e78f53d1SNikolas Klauser  static const openmode app    = 0x01;
281e78f53d1SNikolas Klauser  static const openmode ate    = 0x02;
282e78f53d1SNikolas Klauser  static const openmode binary = 0x04;
283e78f53d1SNikolas Klauser  static const openmode in     = 0x08;
284e78f53d1SNikolas Klauser  static const openmode out    = 0x10;
285e78f53d1SNikolas Klauser  static const openmode trunc  = 0x20;
286e78f53d1SNikolas Klauser#  if _LIBCPP_STD_VER >= 23
287e78f53d1SNikolas Klauser  static const openmode noreplace = 0x40;
288e78f53d1SNikolas Klauser#  endif
289e78f53d1SNikolas Klauser
290e78f53d1SNikolas Klauser  enum seekdir { beg, cur, end };
291e78f53d1SNikolas Klauser
292e78f53d1SNikolas Klauser#  if _LIBCPP_STD_VER <= 14
293e78f53d1SNikolas Klauser  typedef iostate io_state;
294e78f53d1SNikolas Klauser  typedef openmode open_mode;
295e78f53d1SNikolas Klauser  typedef seekdir seek_dir;
296e78f53d1SNikolas Klauser
297e78f53d1SNikolas Klauser  typedef std::streamoff streamoff;
298e78f53d1SNikolas Klauser  typedef std::streampos streampos;
299e78f53d1SNikolas Klauser#  endif
300e78f53d1SNikolas Klauser
301e78f53d1SNikolas Klauser  class _LIBCPP_EXPORTED_FROM_ABI Init;
302e78f53d1SNikolas Klauser
303e78f53d1SNikolas Klauser  // 27.5.2.2 fmtflags state:
304e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI fmtflags flags() const;
305e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI fmtflags flags(fmtflags __fmtfl);
306e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl);
307e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI fmtflags setf(fmtflags __fmtfl, fmtflags __mask);
308e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void unsetf(fmtflags __mask);
309e78f53d1SNikolas Klauser
310e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI streamsize precision() const;
311e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI streamsize precision(streamsize __prec);
312e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI streamsize width() const;
313e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI streamsize width(streamsize __wide);
314e78f53d1SNikolas Klauser
315e78f53d1SNikolas Klauser  // 27.5.2.3 locales:
316e78f53d1SNikolas Klauser  locale imbue(const locale& __loc);
317e78f53d1SNikolas Klauser  locale getloc() const;
318e78f53d1SNikolas Klauser
319e78f53d1SNikolas Klauser  // 27.5.2.5 storage:
320e78f53d1SNikolas Klauser  static int xalloc();
321e78f53d1SNikolas Klauser  long& iword(int __index);
322e78f53d1SNikolas Klauser  void*& pword(int __index);
323e78f53d1SNikolas Klauser
324e78f53d1SNikolas Klauser  // destructor
325e78f53d1SNikolas Klauser  virtual ~ios_base();
326e78f53d1SNikolas Klauser
327e78f53d1SNikolas Klauser  // 27.5.2.6 callbacks;
328e78f53d1SNikolas Klauser  enum event { erase_event, imbue_event, copyfmt_event };
329e78f53d1SNikolas Klauser  typedef void (*event_callback)(event, ios_base&, int __index);
330e78f53d1SNikolas Klauser  void register_callback(event_callback __fn, int __index);
331e78f53d1SNikolas Klauser
332e78f53d1SNikolas Klauser  ios_base(const ios_base&)            = delete;
333e78f53d1SNikolas Klauser  ios_base& operator=(const ios_base&) = delete;
334e78f53d1SNikolas Klauser
335e78f53d1SNikolas Klauser  static bool sync_with_stdio(bool __sync = true);
336e78f53d1SNikolas Klauser
337e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI iostate rdstate() const;
338e78f53d1SNikolas Klauser  void clear(iostate __state = goodbit);
339e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state);
340e78f53d1SNikolas Klauser
341e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool good() const;
342e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool eof() const;
343e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool fail() const;
344e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool bad() const;
345e78f53d1SNikolas Klauser
346e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI iostate exceptions() const;
347e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate);
348e78f53d1SNikolas Klauser
349e78f53d1SNikolas Klauser  void __set_badbit_and_consider_rethrow();
350e78f53d1SNikolas Klauser  void __set_failbit_and_consider_rethrow();
351e78f53d1SNikolas Klauser
352e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void __setstate_nothrow(iostate __state) {
353e78f53d1SNikolas Klauser    if (__rdbuf_)
354e78f53d1SNikolas Klauser      __rdstate_ |= __state;
355e78f53d1SNikolas Klauser    else
356e78f53d1SNikolas Klauser      __rdstate_ |= __state | ios_base::badbit;
357e78f53d1SNikolas Klauser  }
358e78f53d1SNikolas Klauser
359e78f53d1SNikolas Klauserprotected:
360e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI ios_base() : __loc_(nullptr) {
361e78f53d1SNikolas Klauser    // Purposefully does no initialization
362e78f53d1SNikolas Klauser    //
363e78f53d1SNikolas Klauser    // Except for the locale, this is a sentinel to avoid destroying
364e78f53d1SNikolas Klauser    // an uninitialized object. See
365e78f53d1SNikolas Klauser    // test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp
366e78f53d1SNikolas Klauser    // for the details.
367e78f53d1SNikolas Klauser  }
368e78f53d1SNikolas Klauser
369e78f53d1SNikolas Klauser  void init(void* __sb);
370e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void* rdbuf() const { return __rdbuf_; }
371e78f53d1SNikolas Klauser
372e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void rdbuf(void* __sb) {
373e78f53d1SNikolas Klauser    __rdbuf_ = __sb;
374e78f53d1SNikolas Klauser    clear();
375e78f53d1SNikolas Klauser  }
376e78f53d1SNikolas Klauser
377e78f53d1SNikolas Klauser  void __call_callbacks(event);
378e78f53d1SNikolas Klauser  void copyfmt(const ios_base&);
379e78f53d1SNikolas Klauser  void move(ios_base&);
380e78f53d1SNikolas Klauser  void swap(ios_base&) _NOEXCEPT;
381e78f53d1SNikolas Klauser
382e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void set_rdbuf(void* __sb) { __rdbuf_ = __sb; }
383e78f53d1SNikolas Klauser
384e78f53d1SNikolas Klauserprivate:
385e78f53d1SNikolas Klauser  // All data members must be scalars
386e78f53d1SNikolas Klauser  fmtflags __fmtflags_;
387e78f53d1SNikolas Klauser  streamsize __precision_;
388e78f53d1SNikolas Klauser  streamsize __width_;
389e78f53d1SNikolas Klauser  iostate __rdstate_;
390e78f53d1SNikolas Klauser  iostate __exceptions_;
391e78f53d1SNikolas Klauser  void* __rdbuf_;
392e78f53d1SNikolas Klauser  void* __loc_;
393e78f53d1SNikolas Klauser  event_callback* __fn_;
394e78f53d1SNikolas Klauser  int* __index_;
395e78f53d1SNikolas Klauser  size_t __event_size_;
396e78f53d1SNikolas Klauser  size_t __event_cap_;
397e78f53d1SNikolas Klauser// TODO(EricWF): Enable this for both Clang and GCC. Currently it is only
398e78f53d1SNikolas Klauser// enabled with clang.
399e78f53d1SNikolas Klauser#  if defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_NO_THREADS)
400e78f53d1SNikolas Klauser  static atomic<int> __xindex_;
401e78f53d1SNikolas Klauser#  else
402e78f53d1SNikolas Klauser  static int __xindex_;
403e78f53d1SNikolas Klauser#  endif
404e78f53d1SNikolas Klauser  long* __iarray_;
405e78f53d1SNikolas Klauser  size_t __iarray_size_;
406e78f53d1SNikolas Klauser  size_t __iarray_cap_;
407e78f53d1SNikolas Klauser  void** __parray_;
408e78f53d1SNikolas Klauser  size_t __parray_size_;
409e78f53d1SNikolas Klauser  size_t __parray_cap_;
410e78f53d1SNikolas Klauser};
411e78f53d1SNikolas Klauser
412e78f53d1SNikolas Klauser// enum class io_errc
413e78f53d1SNikolas Klauser_LIBCPP_DECLARE_STRONG_ENUM(io_errc){stream = 1};
414e78f53d1SNikolas Klauser_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(io_errc)
415e78f53d1SNikolas Klauser
416e78f53d1SNikolas Klausertemplate <>
417e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc> : public true_type {};
418e78f53d1SNikolas Klauser
419e78f53d1SNikolas Klauser#  ifdef _LIBCPP_CXX03_LANG
420e78f53d1SNikolas Klausertemplate <>
421e78f53d1SNikolas Klauserstruct _LIBCPP_TEMPLATE_VIS is_error_code_enum<io_errc::__lx> : public true_type {};
422e78f53d1SNikolas Klauser#  endif
423e78f53d1SNikolas Klauser
424e78f53d1SNikolas Klauser_LIBCPP_EXPORTED_FROM_ABI const error_category& iostream_category() _NOEXCEPT;
425e78f53d1SNikolas Klauser
426e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI error_code make_error_code(io_errc __e) _NOEXCEPT {
427e78f53d1SNikolas Klauser  return error_code(static_cast<int>(__e), iostream_category());
428e78f53d1SNikolas Klauser}
429e78f53d1SNikolas Klauser
430e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI error_condition make_error_condition(io_errc __e) _NOEXCEPT {
431e78f53d1SNikolas Klauser  return error_condition(static_cast<int>(__e), iostream_category());
432e78f53d1SNikolas Klauser}
433e78f53d1SNikolas Klauser
434e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base::failure : public system_error {
435e78f53d1SNikolas Klauserpublic:
436e78f53d1SNikolas Klauser  explicit failure(const string& __msg, const error_code& __ec = io_errc::stream);
437e78f53d1SNikolas Klauser  explicit failure(const char* __msg, const error_code& __ec = io_errc::stream);
438e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI failure(const failure&) _NOEXCEPT = default;
439e78f53d1SNikolas Klauser  ~failure() _NOEXCEPT override;
440e78f53d1SNikolas Klauser};
441e78f53d1SNikolas Klauser
442e78f53d1SNikolas Klauser_LIBCPP_NORETURN inline _LIBCPP_HIDE_FROM_ABI void __throw_failure(char const* __msg) {
443e78f53d1SNikolas Klauser#  ifndef _LIBCPP_HAS_NO_EXCEPTIONS
444e78f53d1SNikolas Klauser  throw ios_base::failure(__msg);
445e78f53d1SNikolas Klauser#  else
446e78f53d1SNikolas Klauser  _LIBCPP_VERBOSE_ABORT("ios_base::failure was thrown in -fno-exceptions mode with message \"%s\"", __msg);
447e78f53d1SNikolas Klauser#  endif
448e78f53d1SNikolas Klauser}
449e78f53d1SNikolas Klauser
450e78f53d1SNikolas Klauserclass _LIBCPP_EXPORTED_FROM_ABI ios_base::Init {
451e78f53d1SNikolas Klauserpublic:
452e78f53d1SNikolas Klauser  Init();
453e78f53d1SNikolas Klauser  ~Init();
454e78f53d1SNikolas Klauser};
455e78f53d1SNikolas Klauser
456e78f53d1SNikolas Klauser// fmtflags
457e78f53d1SNikolas Klauser
458e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags() const { return __fmtflags_; }
459e78f53d1SNikolas Klauser
460e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::flags(fmtflags __fmtfl) {
461e78f53d1SNikolas Klauser  fmtflags __r = __fmtflags_;
462e78f53d1SNikolas Klauser  __fmtflags_  = __fmtfl;
463e78f53d1SNikolas Klauser  return __r;
464e78f53d1SNikolas Klauser}
465e78f53d1SNikolas Klauser
466e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl) {
467e78f53d1SNikolas Klauser  fmtflags __r = __fmtflags_;
468e78f53d1SNikolas Klauser  __fmtflags_ |= __fmtfl;
469e78f53d1SNikolas Klauser  return __r;
470e78f53d1SNikolas Klauser}
471e78f53d1SNikolas Klauser
472e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::unsetf(fmtflags __mask) { __fmtflags_ &= ~__mask; }
473e78f53d1SNikolas Klauser
474e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::fmtflags ios_base::setf(fmtflags __fmtfl, fmtflags __mask) {
475e78f53d1SNikolas Klauser  fmtflags __r = __fmtflags_;
476e78f53d1SNikolas Klauser  unsetf(__mask);
477e78f53d1SNikolas Klauser  __fmtflags_ |= __fmtfl & __mask;
478e78f53d1SNikolas Klauser  return __r;
479e78f53d1SNikolas Klauser}
480e78f53d1SNikolas Klauser
481e78f53d1SNikolas Klauser// precision
482e78f53d1SNikolas Klauser
483e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision() const { return __precision_; }
484e78f53d1SNikolas Klauser
485e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::precision(streamsize __prec) {
486e78f53d1SNikolas Klauser  streamsize __r = __precision_;
487e78f53d1SNikolas Klauser  __precision_   = __prec;
488e78f53d1SNikolas Klauser  return __r;
489e78f53d1SNikolas Klauser}
490e78f53d1SNikolas Klauser
491e78f53d1SNikolas Klauser// width
492e78f53d1SNikolas Klauser
493e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width() const { return __width_; }
494e78f53d1SNikolas Klauser
495e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI streamsize ios_base::width(streamsize __wide) {
496e78f53d1SNikolas Klauser  streamsize __r = __width_;
497e78f53d1SNikolas Klauser  __width_       = __wide;
498e78f53d1SNikolas Klauser  return __r;
499e78f53d1SNikolas Klauser}
500e78f53d1SNikolas Klauser
501e78f53d1SNikolas Klauser// iostate
502e78f53d1SNikolas Klauser
503e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::rdstate() const { return __rdstate_; }
504e78f53d1SNikolas Klauser
505e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::setstate(iostate __state) { clear(__rdstate_ | __state); }
506e78f53d1SNikolas Klauser
507e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::good() const { return __rdstate_ == 0; }
508e78f53d1SNikolas Klauser
509e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::eof() const { return (__rdstate_ & eofbit) != 0; }
510e78f53d1SNikolas Klauser
511e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::fail() const { return (__rdstate_ & (failbit | badbit)) != 0; }
512e78f53d1SNikolas Klauser
513e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI bool ios_base::bad() const { return (__rdstate_ & badbit) != 0; }
514e78f53d1SNikolas Klauser
515e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI ios_base::iostate ios_base::exceptions() const { return __exceptions_; }
516e78f53d1SNikolas Klauser
517e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void ios_base::exceptions(iostate __iostate) {
518e78f53d1SNikolas Klauser  __exceptions_ = __iostate;
519e78f53d1SNikolas Klauser  clear(__rdstate_);
520e78f53d1SNikolas Klauser}
521e78f53d1SNikolas Klauser
522e78f53d1SNikolas Klausertemplate <class _Traits>
523e78f53d1SNikolas Klauser// Attribute 'packed' is used to keep the layout compatible with the previous
524e78f53d1SNikolas Klauser// definition of the '__fill_' and '_set_' pair in basic_ios on AIX & z/OS.
525e78f53d1SNikolas Klauserstruct _LIBCPP_PACKED _FillHelper {
526e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void __init() { __set_ = false; }
527e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI _FillHelper& operator=(typename _Traits::int_type __x) {
528e78f53d1SNikolas Klauser    __set_      = true;
529e78f53d1SNikolas Klauser    __fill_val_ = __x;
530e78f53d1SNikolas Klauser    return *this;
531e78f53d1SNikolas Klauser  }
532e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __set_; }
533e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; }
534e78f53d1SNikolas Klauser
535e78f53d1SNikolas Klauserprivate:
536e78f53d1SNikolas Klauser  typename _Traits::int_type __fill_val_;
537e78f53d1SNikolas Klauser  bool __set_;
538e78f53d1SNikolas Klauser};
539e78f53d1SNikolas Klauser
540e78f53d1SNikolas Klausertemplate <class _Traits>
541e78f53d1SNikolas Klauserstruct _LIBCPP_PACKED _SentinelValueFill {
542e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void __init() { __fill_val_ = _Traits::eof(); }
543e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI _SentinelValueFill& operator=(typename _Traits::int_type __x) {
544e78f53d1SNikolas Klauser    __fill_val_ = __x;
545e78f53d1SNikolas Klauser    return *this;
546e78f53d1SNikolas Klauser  }
547e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool __is_set() const { return __fill_val_ != _Traits::eof(); }
548e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI typename _Traits::int_type __get() const { return __fill_val_; }
549e78f53d1SNikolas Klauser
550e78f53d1SNikolas Klauserprivate:
551e78f53d1SNikolas Klauser  typename _Traits::int_type __fill_val_;
552e78f53d1SNikolas Klauser};
553e78f53d1SNikolas Klauser
554e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
555e78f53d1SNikolas Klauserclass _LIBCPP_TEMPLATE_VIS basic_ios : public ios_base {
556e78f53d1SNikolas Klauserpublic:
557e78f53d1SNikolas Klauser  // types:
558e78f53d1SNikolas Klauser  typedef _CharT char_type;
559e78f53d1SNikolas Klauser  typedef _Traits traits_type;
560e78f53d1SNikolas Klauser
561e78f53d1SNikolas Klauser  typedef typename traits_type::int_type int_type;
562e78f53d1SNikolas Klauser  typedef typename traits_type::pos_type pos_type;
563e78f53d1SNikolas Klauser  typedef typename traits_type::off_type off_type;
564e78f53d1SNikolas Klauser
565e78f53d1SNikolas Klauser  static_assert(is_same<_CharT, typename traits_type::char_type>::value,
566e78f53d1SNikolas Klauser                "traits_type::char_type must be the same type as CharT");
567e78f53d1SNikolas Klauser
568e78f53d1SNikolas Klauser#  ifdef _LIBCPP_CXX03_LANG
569e78f53d1SNikolas Klauser  // Preserve the ability to compare with literal 0,
570e78f53d1SNikolas Klauser  // and implicitly convert to bool, but not implicitly convert to int.
571e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI operator void*() const { return fail() ? nullptr : (void*)this; }
572e78f53d1SNikolas Klauser#  else
573e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI explicit operator bool() const { return !fail(); }
574e78f53d1SNikolas Klauser#  endif
575e78f53d1SNikolas Klauser
576e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool operator!() const { return fail(); }
577e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI iostate rdstate() const { return ios_base::rdstate(); }
578e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void clear(iostate __state = goodbit) { ios_base::clear(__state); }
579e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void setstate(iostate __state) { ios_base::setstate(__state); }
580e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool good() const { return ios_base::good(); }
581e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool eof() const { return ios_base::eof(); }
582e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool fail() const { return ios_base::fail(); }
583e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI bool bad() const { return ios_base::bad(); }
584e78f53d1SNikolas Klauser
585e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI iostate exceptions() const { return ios_base::exceptions(); }
586e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void exceptions(iostate __iostate) { ios_base::exceptions(__iostate); }
587e78f53d1SNikolas Klauser
588e78f53d1SNikolas Klauser  // 27.5.4.1 Constructor/destructor:
589e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI explicit basic_ios(basic_streambuf<char_type, traits_type>* __sb);
590e78f53d1SNikolas Klauser  ~basic_ios() override;
591e78f53d1SNikolas Klauser
592e78f53d1SNikolas Klauser  // 27.5.4.2 Members:
593e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie() const;
594e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI basic_ostream<char_type, traits_type>* tie(basic_ostream<char_type, traits_type>* __tiestr);
595e78f53d1SNikolas Klauser
596e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf() const;
597e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI basic_streambuf<char_type, traits_type>* rdbuf(basic_streambuf<char_type, traits_type>* __sb);
598e78f53d1SNikolas Klauser
599e78f53d1SNikolas Klauser  basic_ios& copyfmt(const basic_ios& __rhs);
600e78f53d1SNikolas Klauser
601e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI char_type fill() const;
602e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI char_type fill(char_type __ch);
603e78f53d1SNikolas Klauser
604e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI locale imbue(const locale& __loc);
605e78f53d1SNikolas Klauser
606e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI char narrow(char_type __c, char __dfault) const;
607e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const;
608e78f53d1SNikolas Klauser
609e78f53d1SNikolas Klauserprotected:
610e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI basic_ios() {
611e78f53d1SNikolas Klauser    // purposefully does no initialization
612e78f53d1SNikolas Klauser    // since the destructor does nothing this does not have ios_base issues.
613e78f53d1SNikolas Klauser  }
614e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void init(basic_streambuf<char_type, traits_type>* __sb);
615e78f53d1SNikolas Klauser
616e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void move(basic_ios& __rhs);
617e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void move(basic_ios&& __rhs) { move(__rhs); }
618e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void swap(basic_ios& __rhs) _NOEXCEPT;
619e78f53d1SNikolas Klauser  _LIBCPP_HIDE_FROM_ABI void set_rdbuf(basic_streambuf<char_type, traits_type>* __sb);
620e78f53d1SNikolas Klauser
621e78f53d1SNikolas Klauserprivate:
622e78f53d1SNikolas Klauser  basic_ostream<char_type, traits_type>* __tie_;
623e78f53d1SNikolas Klauser
624e78f53d1SNikolas Klauser#  if defined(_LIBCPP_ABI_IOS_ALLOW_ARBITRARY_FILL_VALUE)
625e78f53d1SNikolas Klauser  using _FillType = _FillHelper<traits_type>;
626e78f53d1SNikolas Klauser#  else
627e78f53d1SNikolas Klauser  using _FillType = _SentinelValueFill<traits_type>;
628e78f53d1SNikolas Klauser#  endif
629e78f53d1SNikolas Klauser  mutable _FillType __fill_;
630e78f53d1SNikolas Klauser};
631e78f53d1SNikolas Klauser
632e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
633e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ios<_CharT, _Traits>::basic_ios(basic_streambuf<char_type, traits_type>* __sb) {
634e78f53d1SNikolas Klauser  init(__sb);
635e78f53d1SNikolas Klauser}
636e78f53d1SNikolas Klauser
637e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
638e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::~basic_ios() {}
639e78f53d1SNikolas Klauser
640e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
641e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::init(basic_streambuf<char_type, traits_type>* __sb) {
642e78f53d1SNikolas Klauser  ios_base::init(__sb);
643e78f53d1SNikolas Klauser  __tie_ = nullptr;
644e78f53d1SNikolas Klauser  __fill_.__init();
645e78f53d1SNikolas Klauser}
646e78f53d1SNikolas Klauser
647e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
648e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>* basic_ios<_CharT, _Traits>::tie() const {
649e78f53d1SNikolas Klauser  return __tie_;
650e78f53d1SNikolas Klauser}
651e78f53d1SNikolas Klauser
652e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
653e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>*
654e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::tie(basic_ostream<char_type, traits_type>* __tiestr) {
655e78f53d1SNikolas Klauser  basic_ostream<char_type, traits_type>* __r = __tie_;
656e78f53d1SNikolas Klauser  __tie_                                     = __tiestr;
657e78f53d1SNikolas Klauser  return __r;
658e78f53d1SNikolas Klauser}
659e78f53d1SNikolas Klauser
660e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
661e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>* basic_ios<_CharT, _Traits>::rdbuf() const {
662e78f53d1SNikolas Klauser  return static_cast<basic_streambuf<char_type, traits_type>*>(ios_base::rdbuf());
663e78f53d1SNikolas Klauser}
664e78f53d1SNikolas Klauser
665e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
666e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI basic_streambuf<_CharT, _Traits>*
667e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<char_type, traits_type>* __sb) {
668e78f53d1SNikolas Klauser  basic_streambuf<char_type, traits_type>* __r = rdbuf();
669e78f53d1SNikolas Klauser  ios_base::rdbuf(__sb);
670e78f53d1SNikolas Klauser  return __r;
671e78f53d1SNikolas Klauser}
672e78f53d1SNikolas Klauser
673e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
674e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) {
675e78f53d1SNikolas Klauser  locale __r = getloc();
676e78f53d1SNikolas Klauser  ios_base::imbue(__loc);
677e78f53d1SNikolas Klauser  if (rdbuf())
678e78f53d1SNikolas Klauser    rdbuf()->pubimbue(__loc);
679e78f53d1SNikolas Klauser  return __r;
680e78f53d1SNikolas Klauser}
681e78f53d1SNikolas Klauser
682e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
683e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI char basic_ios<_CharT, _Traits>::narrow(char_type __c, char __dfault) const {
684e78f53d1SNikolas Klauser  return std::use_facet<ctype<char_type> >(getloc()).narrow(__c, __dfault);
685e78f53d1SNikolas Klauser}
686e78f53d1SNikolas Klauser
687e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
688e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::widen(char __c) const {
689e78f53d1SNikolas Klauser  return std::use_facet<ctype<char_type> >(getloc()).widen(__c);
690e78f53d1SNikolas Klauser}
691e78f53d1SNikolas Klauser
692e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
693e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill() const {
694e78f53d1SNikolas Klauser  if (!__fill_.__is_set())
695e78f53d1SNikolas Klauser    __fill_ = widen(' ');
696e78f53d1SNikolas Klauser  return __fill_.__get();
697e78f53d1SNikolas Klauser}
698e78f53d1SNikolas Klauser
699e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
700e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI _CharT basic_ios<_CharT, _Traits>::fill(char_type __ch) {
701e78f53d1SNikolas Klauser  if (!__fill_.__is_set())
702e78f53d1SNikolas Klauser    __fill_ = widen(' ');
703e78f53d1SNikolas Klauser  char_type __r = __fill_.__get();
704e78f53d1SNikolas Klauser  __fill_       = __ch;
705e78f53d1SNikolas Klauser  return __r;
706e78f53d1SNikolas Klauser}
707e78f53d1SNikolas Klauser
708e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
709e78f53d1SNikolas Klauserbasic_ios<_CharT, _Traits>& basic_ios<_CharT, _Traits>::copyfmt(const basic_ios& __rhs) {
710e78f53d1SNikolas Klauser  if (this != &__rhs) {
711e78f53d1SNikolas Klauser    __call_callbacks(erase_event);
712e78f53d1SNikolas Klauser    ios_base::copyfmt(__rhs);
713e78f53d1SNikolas Klauser    __tie_  = __rhs.__tie_;
714e78f53d1SNikolas Klauser    __fill_ = __rhs.__fill_;
715e78f53d1SNikolas Klauser    __call_callbacks(copyfmt_event);
716e78f53d1SNikolas Klauser    exceptions(__rhs.exceptions());
717e78f53d1SNikolas Klauser  }
718e78f53d1SNikolas Klauser  return *this;
719e78f53d1SNikolas Klauser}
720e78f53d1SNikolas Klauser
721e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
722e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::move(basic_ios& __rhs) {
723e78f53d1SNikolas Klauser  ios_base::move(__rhs);
724e78f53d1SNikolas Klauser  __tie_       = __rhs.__tie_;
725e78f53d1SNikolas Klauser  __rhs.__tie_ = nullptr;
726e78f53d1SNikolas Klauser  __fill_      = __rhs.__fill_;
727e78f53d1SNikolas Klauser}
728e78f53d1SNikolas Klauser
729e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
730e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::swap(basic_ios& __rhs) _NOEXCEPT {
731e78f53d1SNikolas Klauser  ios_base::swap(__rhs);
732e78f53d1SNikolas Klauser  std::swap(__tie_, __rhs.__tie_);
733e78f53d1SNikolas Klauser  std::swap(__fill_, __rhs.__fill_);
734e78f53d1SNikolas Klauser}
735e78f53d1SNikolas Klauser
736e78f53d1SNikolas Klausertemplate <class _CharT, class _Traits>
737e78f53d1SNikolas Klauserinline _LIBCPP_HIDE_FROM_ABI void basic_ios<_CharT, _Traits>::set_rdbuf(basic_streambuf<char_type, traits_type>* __sb) {
738e78f53d1SNikolas Klauser  ios_base::set_rdbuf(__sb);
739e78f53d1SNikolas Klauser}
740e78f53d1SNikolas Klauser
741e78f53d1SNikolas Klauserextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<char>;
742e78f53d1SNikolas Klauser
743e78f53d1SNikolas Klauser#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
744e78f53d1SNikolas Klauserextern template class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_ios<wchar_t>;
745e78f53d1SNikolas Klauser#  endif
746e78f53d1SNikolas Klauser
747e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& boolalpha(ios_base& __str) {
748e78f53d1SNikolas Klauser  __str.setf(ios_base::boolalpha);
749e78f53d1SNikolas Klauser  return __str;
750e78f53d1SNikolas Klauser}
751e78f53d1SNikolas Klauser
752e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noboolalpha(ios_base& __str) {
753e78f53d1SNikolas Klauser  __str.unsetf(ios_base::boolalpha);
754e78f53d1SNikolas Klauser  return __str;
755e78f53d1SNikolas Klauser}
756e78f53d1SNikolas Klauser
757e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showbase(ios_base& __str) {
758e78f53d1SNikolas Klauser  __str.setf(ios_base::showbase);
759e78f53d1SNikolas Klauser  return __str;
760e78f53d1SNikolas Klauser}
761e78f53d1SNikolas Klauser
762e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowbase(ios_base& __str) {
763e78f53d1SNikolas Klauser  __str.unsetf(ios_base::showbase);
764e78f53d1SNikolas Klauser  return __str;
765e78f53d1SNikolas Klauser}
766e78f53d1SNikolas Klauser
767e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showpoint(ios_base& __str) {
768e78f53d1SNikolas Klauser  __str.setf(ios_base::showpoint);
769e78f53d1SNikolas Klauser  return __str;
770e78f53d1SNikolas Klauser}
771e78f53d1SNikolas Klauser
772e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpoint(ios_base& __str) {
773e78f53d1SNikolas Klauser  __str.unsetf(ios_base::showpoint);
774e78f53d1SNikolas Klauser  return __str;
775e78f53d1SNikolas Klauser}
776e78f53d1SNikolas Klauser
777e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& showpos(ios_base& __str) {
778e78f53d1SNikolas Klauser  __str.setf(ios_base::showpos);
779e78f53d1SNikolas Klauser  return __str;
780e78f53d1SNikolas Klauser}
781e78f53d1SNikolas Klauser
782e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noshowpos(ios_base& __str) {
783e78f53d1SNikolas Klauser  __str.unsetf(ios_base::showpos);
784e78f53d1SNikolas Klauser  return __str;
785e78f53d1SNikolas Klauser}
786e78f53d1SNikolas Klauser
787e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& skipws(ios_base& __str) {
788e78f53d1SNikolas Klauser  __str.setf(ios_base::skipws);
789e78f53d1SNikolas Klauser  return __str;
790e78f53d1SNikolas Klauser}
791e78f53d1SNikolas Klauser
792e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& noskipws(ios_base& __str) {
793e78f53d1SNikolas Klauser  __str.unsetf(ios_base::skipws);
794e78f53d1SNikolas Klauser  return __str;
795e78f53d1SNikolas Klauser}
796e78f53d1SNikolas Klauser
797e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& uppercase(ios_base& __str) {
798e78f53d1SNikolas Klauser  __str.setf(ios_base::uppercase);
799e78f53d1SNikolas Klauser  return __str;
800e78f53d1SNikolas Klauser}
801e78f53d1SNikolas Klauser
802e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& nouppercase(ios_base& __str) {
803e78f53d1SNikolas Klauser  __str.unsetf(ios_base::uppercase);
804e78f53d1SNikolas Klauser  return __str;
805e78f53d1SNikolas Klauser}
806e78f53d1SNikolas Klauser
807e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& unitbuf(ios_base& __str) {
808e78f53d1SNikolas Klauser  __str.setf(ios_base::unitbuf);
809e78f53d1SNikolas Klauser  return __str;
810e78f53d1SNikolas Klauser}
811e78f53d1SNikolas Klauser
812e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& nounitbuf(ios_base& __str) {
813e78f53d1SNikolas Klauser  __str.unsetf(ios_base::unitbuf);
814e78f53d1SNikolas Klauser  return __str;
815e78f53d1SNikolas Klauser}
816e78f53d1SNikolas Klauser
817e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& internal(ios_base& __str) {
818e78f53d1SNikolas Klauser  __str.setf(ios_base::internal, ios_base::adjustfield);
819e78f53d1SNikolas Klauser  return __str;
820e78f53d1SNikolas Klauser}
821e78f53d1SNikolas Klauser
822e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& left(ios_base& __str) {
823e78f53d1SNikolas Klauser  __str.setf(ios_base::left, ios_base::adjustfield);
824e78f53d1SNikolas Klauser  return __str;
825e78f53d1SNikolas Klauser}
826e78f53d1SNikolas Klauser
827e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& right(ios_base& __str) {
828e78f53d1SNikolas Klauser  __str.setf(ios_base::right, ios_base::adjustfield);
829e78f53d1SNikolas Klauser  return __str;
830e78f53d1SNikolas Klauser}
831e78f53d1SNikolas Klauser
832e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& dec(ios_base& __str) {
833e78f53d1SNikolas Klauser  __str.setf(ios_base::dec, ios_base::basefield);
834e78f53d1SNikolas Klauser  return __str;
835e78f53d1SNikolas Klauser}
836e78f53d1SNikolas Klauser
837e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& hex(ios_base& __str) {
838e78f53d1SNikolas Klauser  __str.setf(ios_base::hex, ios_base::basefield);
839e78f53d1SNikolas Klauser  return __str;
840e78f53d1SNikolas Klauser}
841e78f53d1SNikolas Klauser
842e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& oct(ios_base& __str) {
843e78f53d1SNikolas Klauser  __str.setf(ios_base::oct, ios_base::basefield);
844e78f53d1SNikolas Klauser  return __str;
845e78f53d1SNikolas Klauser}
846e78f53d1SNikolas Klauser
847e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& fixed(ios_base& __str) {
848e78f53d1SNikolas Klauser  __str.setf(ios_base::fixed, ios_base::floatfield);
849e78f53d1SNikolas Klauser  return __str;
850e78f53d1SNikolas Klauser}
851e78f53d1SNikolas Klauser
852e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& scientific(ios_base& __str) {
853e78f53d1SNikolas Klauser  __str.setf(ios_base::scientific, ios_base::floatfield);
854e78f53d1SNikolas Klauser  return __str;
855e78f53d1SNikolas Klauser}
856e78f53d1SNikolas Klauser
857e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& hexfloat(ios_base& __str) {
858e78f53d1SNikolas Klauser  __str.setf(ios_base::fixed | ios_base::scientific, ios_base::floatfield);
859e78f53d1SNikolas Klauser  return __str;
860e78f53d1SNikolas Klauser}
861e78f53d1SNikolas Klauser
862e78f53d1SNikolas Klauser_LIBCPP_HIDE_FROM_ABI inline ios_base& defaultfloat(ios_base& __str) {
863e78f53d1SNikolas Klauser  __str.unsetf(ios_base::floatfield);
864e78f53d1SNikolas Klauser  return __str;
865e78f53d1SNikolas Klauser}
866e78f53d1SNikolas Klauser
867e78f53d1SNikolas Klauser_LIBCPP_END_NAMESPACE_STD
868e78f53d1SNikolas Klauser
869e78f53d1SNikolas Klauser_LIBCPP_POP_MACROS
870e78f53d1SNikolas Klauser
871e78f53d1SNikolas Klauser#endif // !defined(_LIBCPP_HAS_NO_LOCALIZATION)
872e78f53d1SNikolas Klauser
873e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
87473fbae83SNikolas Klauser#  include <__cxx03/atomic>
87573fbae83SNikolas Klauser#  include <__cxx03/concepts>
87673fbae83SNikolas Klauser#  include <__cxx03/cstddef>
87773fbae83SNikolas Klauser#  include <__cxx03/cstdlib>
87873fbae83SNikolas Klauser#  include <__cxx03/cstring>
87973fbae83SNikolas Klauser#  include <__cxx03/initializer_list>
88073fbae83SNikolas Klauser#  include <__cxx03/limits>
88173fbae83SNikolas Klauser#  include <__cxx03/mutex>
88273fbae83SNikolas Klauser#  include <__cxx03/new>
88373fbae83SNikolas Klauser#  include <__cxx03/stdexcept>
88473fbae83SNikolas Klauser#  include <__cxx03/system_error>
88573fbae83SNikolas Klauser#  include <__cxx03/type_traits>
88673fbae83SNikolas Klauser#  include <__cxx03/typeinfo>
887e78f53d1SNikolas Klauser#endif
888e78f53d1SNikolas Klauser
889*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_IOS
890