xref: /dflybsd-src/contrib/gcc-4.7/libstdc++-v3/include/std/iomanip (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino// Standard stream manipulators -*- C++ -*-
2*e4b17023SJohn Marino
3*e4b17023SJohn Marino// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
4*e4b17023SJohn Marino// 2006, 2007, 2008, 2009, 2010, 2011
5*e4b17023SJohn Marino// Free Software Foundation, Inc.
6*e4b17023SJohn Marino//
7*e4b17023SJohn Marino// This file is part of the GNU ISO C++ Library.  This library is free
8*e4b17023SJohn Marino// software; you can redistribute it and/or modify it under the
9*e4b17023SJohn Marino// terms of the GNU General Public License as published by the
10*e4b17023SJohn Marino// Free Software Foundation; either version 3, or (at your option)
11*e4b17023SJohn Marino// any later version.
12*e4b17023SJohn Marino
13*e4b17023SJohn Marino// This library is distributed in the hope that it will be useful,
14*e4b17023SJohn Marino// but WITHOUT ANY WARRANTY; without even the implied warranty of
15*e4b17023SJohn Marino// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16*e4b17023SJohn Marino// GNU General Public License for more details.
17*e4b17023SJohn Marino
18*e4b17023SJohn Marino// Under Section 7 of GPL version 3, you are granted additional
19*e4b17023SJohn Marino// permissions described in the GCC Runtime Library Exception, version
20*e4b17023SJohn Marino// 3.1, as published by the Free Software Foundation.
21*e4b17023SJohn Marino
22*e4b17023SJohn Marino// You should have received a copy of the GNU General Public License and
23*e4b17023SJohn Marino// a copy of the GCC Runtime Library Exception along with this program;
24*e4b17023SJohn Marino// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
25*e4b17023SJohn Marino// <http://www.gnu.org/licenses/>.
26*e4b17023SJohn Marino
27*e4b17023SJohn Marino/** @file include/iomanip
28*e4b17023SJohn Marino *  This is a Standard C++ Library header.
29*e4b17023SJohn Marino */
30*e4b17023SJohn Marino
31*e4b17023SJohn Marino//
32*e4b17023SJohn Marino// ISO C++ 14882: 27.6.3  Standard manipulators
33*e4b17023SJohn Marino//
34*e4b17023SJohn Marino
35*e4b17023SJohn Marino#ifndef _GLIBCXX_IOMANIP
36*e4b17023SJohn Marino#define _GLIBCXX_IOMANIP 1
37*e4b17023SJohn Marino
38*e4b17023SJohn Marino#pragma GCC system_header
39*e4b17023SJohn Marino
40*e4b17023SJohn Marino#include <bits/c++config.h>
41*e4b17023SJohn Marino#include <iosfwd>
42*e4b17023SJohn Marino#include <bits/ios_base.h>
43*e4b17023SJohn Marino
44*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
45*e4b17023SJohn Marino#include <locale>
46*e4b17023SJohn Marino#endif
47*e4b17023SJohn Marino
48*e4b17023SJohn Marinonamespace std _GLIBCXX_VISIBILITY(default)
49*e4b17023SJohn Marino{
50*e4b17023SJohn Marino_GLIBCXX_BEGIN_NAMESPACE_VERSION
51*e4b17023SJohn Marino
52*e4b17023SJohn Marino  // [27.6.3] standard manipulators
53*e4b17023SJohn Marino  // Also see DR 183.
54*e4b17023SJohn Marino
55*e4b17023SJohn Marino  struct _Resetiosflags { ios_base::fmtflags _M_mask; };
56*e4b17023SJohn Marino
57*e4b17023SJohn Marino  /**
58*e4b17023SJohn Marino   *  @brief  Manipulator for @c setf.
59*e4b17023SJohn Marino   *  @param  __mask  A format flags mask.
60*e4b17023SJohn Marino   *
61*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator resets the specified flags,
62*e4b17023SJohn Marino   *  via @e stream.setf(0,__mask).
63*e4b17023SJohn Marino  */
64*e4b17023SJohn Marino  inline _Resetiosflags
65*e4b17023SJohn Marino  resetiosflags(ios_base::fmtflags __mask)
66*e4b17023SJohn Marino  { return { __mask }; }
67*e4b17023SJohn Marino
68*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
69*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
70*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Resetiosflags __f)
71*e4b17023SJohn Marino    {
72*e4b17023SJohn Marino      __is.setf(ios_base::fmtflags(0), __f._M_mask);
73*e4b17023SJohn Marino      return __is;
74*e4b17023SJohn Marino    }
75*e4b17023SJohn Marino
76*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
77*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
78*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Resetiosflags __f)
79*e4b17023SJohn Marino    {
80*e4b17023SJohn Marino      __os.setf(ios_base::fmtflags(0), __f._M_mask);
81*e4b17023SJohn Marino      return __os;
82*e4b17023SJohn Marino    }
83*e4b17023SJohn Marino
84*e4b17023SJohn Marino
85*e4b17023SJohn Marino  struct _Setiosflags { ios_base::fmtflags _M_mask; };
86*e4b17023SJohn Marino
87*e4b17023SJohn Marino  /**
88*e4b17023SJohn Marino   *  @brief  Manipulator for @c setf.
89*e4b17023SJohn Marino   *  @param  __mask  A format flags mask.
90*e4b17023SJohn Marino   *
91*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator sets the format flags
92*e4b17023SJohn Marino   *  to @a __mask.
93*e4b17023SJohn Marino  */
94*e4b17023SJohn Marino  inline _Setiosflags
95*e4b17023SJohn Marino  setiosflags(ios_base::fmtflags __mask)
96*e4b17023SJohn Marino  { return { __mask }; }
97*e4b17023SJohn Marino
98*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
99*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
100*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Setiosflags __f)
101*e4b17023SJohn Marino    {
102*e4b17023SJohn Marino      __is.setf(__f._M_mask);
103*e4b17023SJohn Marino      return __is;
104*e4b17023SJohn Marino    }
105*e4b17023SJohn Marino
106*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
107*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
108*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Setiosflags __f)
109*e4b17023SJohn Marino    {
110*e4b17023SJohn Marino      __os.setf(__f._M_mask);
111*e4b17023SJohn Marino      return __os;
112*e4b17023SJohn Marino    }
113*e4b17023SJohn Marino
114*e4b17023SJohn Marino
115*e4b17023SJohn Marino  struct _Setbase { int _M_base; };
116*e4b17023SJohn Marino
117*e4b17023SJohn Marino  /**
118*e4b17023SJohn Marino   *  @brief  Manipulator for @c setf.
119*e4b17023SJohn Marino   *  @param  __base  A numeric base.
120*e4b17023SJohn Marino   *
121*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator changes the
122*e4b17023SJohn Marino   *  @c ios_base::basefield flags to @c oct, @c dec, or @c hex when @a base
123*e4b17023SJohn Marino   *  is 8, 10, or 16, accordingly, and to 0 if @a __base is any other value.
124*e4b17023SJohn Marino  */
125*e4b17023SJohn Marino  inline _Setbase
126*e4b17023SJohn Marino  setbase(int __base)
127*e4b17023SJohn Marino  { return { __base }; }
128*e4b17023SJohn Marino
129*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
130*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
131*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Setbase __f)
132*e4b17023SJohn Marino    {
133*e4b17023SJohn Marino      __is.setf(__f._M_base ==  8 ? ios_base::oct :
134*e4b17023SJohn Marino		__f._M_base == 10 ? ios_base::dec :
135*e4b17023SJohn Marino		__f._M_base == 16 ? ios_base::hex :
136*e4b17023SJohn Marino		ios_base::fmtflags(0), ios_base::basefield);
137*e4b17023SJohn Marino      return __is;
138*e4b17023SJohn Marino    }
139*e4b17023SJohn Marino
140*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
141*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
142*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Setbase __f)
143*e4b17023SJohn Marino    {
144*e4b17023SJohn Marino      __os.setf(__f._M_base ==  8 ? ios_base::oct :
145*e4b17023SJohn Marino		__f._M_base == 10 ? ios_base::dec :
146*e4b17023SJohn Marino		__f._M_base == 16 ? ios_base::hex :
147*e4b17023SJohn Marino		ios_base::fmtflags(0), ios_base::basefield);
148*e4b17023SJohn Marino      return __os;
149*e4b17023SJohn Marino    }
150*e4b17023SJohn Marino
151*e4b17023SJohn Marino
152*e4b17023SJohn Marino  template<typename _CharT>
153*e4b17023SJohn Marino    struct _Setfill { _CharT _M_c; };
154*e4b17023SJohn Marino
155*e4b17023SJohn Marino  /**
156*e4b17023SJohn Marino   *  @brief  Manipulator for @c fill.
157*e4b17023SJohn Marino   *  @param  __c  The new fill character.
158*e4b17023SJohn Marino   *
159*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator calls @c fill(__c) for that
160*e4b17023SJohn Marino   *  object.
161*e4b17023SJohn Marino  */
162*e4b17023SJohn Marino  template<typename _CharT>
163*e4b17023SJohn Marino    inline _Setfill<_CharT>
164*e4b17023SJohn Marino    setfill(_CharT __c)
165*e4b17023SJohn Marino    { return { __c }; }
166*e4b17023SJohn Marino
167*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
168*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
169*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Setfill<_CharT> __f)
170*e4b17023SJohn Marino    {
171*e4b17023SJohn Marino      __is.fill(__f._M_c);
172*e4b17023SJohn Marino      return __is;
173*e4b17023SJohn Marino    }
174*e4b17023SJohn Marino
175*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
176*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
177*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Setfill<_CharT> __f)
178*e4b17023SJohn Marino    {
179*e4b17023SJohn Marino      __os.fill(__f._M_c);
180*e4b17023SJohn Marino      return __os;
181*e4b17023SJohn Marino    }
182*e4b17023SJohn Marino
183*e4b17023SJohn Marino
184*e4b17023SJohn Marino  struct _Setprecision { int _M_n; };
185*e4b17023SJohn Marino
186*e4b17023SJohn Marino  /**
187*e4b17023SJohn Marino   *  @brief  Manipulator for @c precision.
188*e4b17023SJohn Marino   *  @param  __n  The new precision.
189*e4b17023SJohn Marino   *
190*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator calls @c precision(__n) for
191*e4b17023SJohn Marino   *  that object.
192*e4b17023SJohn Marino  */
193*e4b17023SJohn Marino  inline _Setprecision
194*e4b17023SJohn Marino  setprecision(int __n)
195*e4b17023SJohn Marino  { return { __n }; }
196*e4b17023SJohn Marino
197*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
198*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
199*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Setprecision __f)
200*e4b17023SJohn Marino    {
201*e4b17023SJohn Marino      __is.precision(__f._M_n);
202*e4b17023SJohn Marino      return __is;
203*e4b17023SJohn Marino    }
204*e4b17023SJohn Marino
205*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
206*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
207*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Setprecision __f)
208*e4b17023SJohn Marino    {
209*e4b17023SJohn Marino      __os.precision(__f._M_n);
210*e4b17023SJohn Marino      return __os;
211*e4b17023SJohn Marino    }
212*e4b17023SJohn Marino
213*e4b17023SJohn Marino
214*e4b17023SJohn Marino  struct _Setw { int _M_n; };
215*e4b17023SJohn Marino
216*e4b17023SJohn Marino  /**
217*e4b17023SJohn Marino   *  @brief  Manipulator for @c width.
218*e4b17023SJohn Marino   *  @param  __n  The new width.
219*e4b17023SJohn Marino   *
220*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator calls @c width(__n) for
221*e4b17023SJohn Marino   *  that object.
222*e4b17023SJohn Marino  */
223*e4b17023SJohn Marino  inline _Setw
224*e4b17023SJohn Marino  setw(int __n)
225*e4b17023SJohn Marino  { return { __n }; }
226*e4b17023SJohn Marino
227*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
228*e4b17023SJohn Marino    inline basic_istream<_CharT, _Traits>&
229*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Setw __f)
230*e4b17023SJohn Marino    {
231*e4b17023SJohn Marino      __is.width(__f._M_n);
232*e4b17023SJohn Marino      return __is;
233*e4b17023SJohn Marino    }
234*e4b17023SJohn Marino
235*e4b17023SJohn Marino  template<typename _CharT, typename _Traits>
236*e4b17023SJohn Marino    inline basic_ostream<_CharT, _Traits>&
237*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Setw __f)
238*e4b17023SJohn Marino    {
239*e4b17023SJohn Marino      __os.width(__f._M_n);
240*e4b17023SJohn Marino      return __os;
241*e4b17023SJohn Marino    }
242*e4b17023SJohn Marino
243*e4b17023SJohn Marino#ifdef __GXX_EXPERIMENTAL_CXX0X__
244*e4b17023SJohn Marino
245*e4b17023SJohn Marino  template<typename _MoneyT>
246*e4b17023SJohn Marino    struct _Get_money { _MoneyT& _M_mon; bool _M_intl; };
247*e4b17023SJohn Marino
248*e4b17023SJohn Marino  /**
249*e4b17023SJohn Marino   *  @brief  Extended manipulator for extracting money.
250*e4b17023SJohn Marino   *  @param  __mon  Either long double or a specialization of @c basic_string.
251*e4b17023SJohn Marino   *  @param  __intl A bool indicating whether international format
252*e4b17023SJohn Marino   *                 is to be used.
253*e4b17023SJohn Marino   *
254*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator extracts @a __mon.
255*e4b17023SJohn Marino  */
256*e4b17023SJohn Marino  template<typename _MoneyT>
257*e4b17023SJohn Marino    inline _Get_money<_MoneyT>
258*e4b17023SJohn Marino    get_money(_MoneyT& __mon, bool __intl = false)
259*e4b17023SJohn Marino    { return { __mon, __intl }; }
260*e4b17023SJohn Marino
261*e4b17023SJohn Marino  template<typename _CharT, typename _Traits, typename _MoneyT>
262*e4b17023SJohn Marino    basic_istream<_CharT, _Traits>&
263*e4b17023SJohn Marino    operator>>(basic_istream<_CharT, _Traits>& __is, _Get_money<_MoneyT> __f)
264*e4b17023SJohn Marino    {
265*e4b17023SJohn Marino      typename basic_istream<_CharT, _Traits>::sentry __cerb(__is, false);
266*e4b17023SJohn Marino      if (__cerb)
267*e4b17023SJohn Marino	{
268*e4b17023SJohn Marino	  ios_base::iostate __err = ios_base::goodbit;
269*e4b17023SJohn Marino	  __try
270*e4b17023SJohn Marino	    {
271*e4b17023SJohn Marino	      typedef istreambuf_iterator<_CharT, _Traits>   _Iter;
272*e4b17023SJohn Marino	      typedef money_get<_CharT, _Iter>               _MoneyGet;
273*e4b17023SJohn Marino
274*e4b17023SJohn Marino	      const _MoneyGet& __mg = use_facet<_MoneyGet>(__is.getloc());
275*e4b17023SJohn Marino	      __mg.get(_Iter(__is.rdbuf()), _Iter(), __f._M_intl,
276*e4b17023SJohn Marino		       __is, __err, __f._M_mon);
277*e4b17023SJohn Marino	    }
278*e4b17023SJohn Marino	  __catch(__cxxabiv1::__forced_unwind&)
279*e4b17023SJohn Marino	    {
280*e4b17023SJohn Marino	      __is._M_setstate(ios_base::badbit);
281*e4b17023SJohn Marino	      __throw_exception_again;
282*e4b17023SJohn Marino	    }
283*e4b17023SJohn Marino	  __catch(...)
284*e4b17023SJohn Marino	    { __is._M_setstate(ios_base::badbit); }
285*e4b17023SJohn Marino	  if (__err)
286*e4b17023SJohn Marino	    __is.setstate(__err);
287*e4b17023SJohn Marino	}
288*e4b17023SJohn Marino      return __is;
289*e4b17023SJohn Marino    }
290*e4b17023SJohn Marino
291*e4b17023SJohn Marino
292*e4b17023SJohn Marino  template<typename _MoneyT>
293*e4b17023SJohn Marino    struct _Put_money { const _MoneyT& _M_mon; bool _M_intl; };
294*e4b17023SJohn Marino
295*e4b17023SJohn Marino  /**
296*e4b17023SJohn Marino   *  @brief  Extended manipulator for inserting money.
297*e4b17023SJohn Marino   *  @param  __mon  Either long double or a specialization of @c basic_string.
298*e4b17023SJohn Marino   *  @param  __intl A bool indicating whether international format
299*e4b17023SJohn Marino   *                 is to be used.
300*e4b17023SJohn Marino   *
301*e4b17023SJohn Marino   *  Sent to a stream object, this manipulator inserts @a __mon.
302*e4b17023SJohn Marino  */
303*e4b17023SJohn Marino  template<typename _MoneyT>
304*e4b17023SJohn Marino    inline _Put_money<_MoneyT>
305*e4b17023SJohn Marino    put_money(const _MoneyT& __mon, bool __intl = false)
306*e4b17023SJohn Marino    { return { __mon, __intl }; }
307*e4b17023SJohn Marino
308*e4b17023SJohn Marino  template<typename _CharT, typename _Traits, typename _MoneyT>
309*e4b17023SJohn Marino    basic_ostream<_CharT, _Traits>&
310*e4b17023SJohn Marino    operator<<(basic_ostream<_CharT, _Traits>& __os, _Put_money<_MoneyT> __f)
311*e4b17023SJohn Marino    {
312*e4b17023SJohn Marino      typename basic_ostream<_CharT, _Traits>::sentry __cerb(__os);
313*e4b17023SJohn Marino      if (__cerb)
314*e4b17023SJohn Marino	{
315*e4b17023SJohn Marino	  ios_base::iostate __err = ios_base::goodbit;
316*e4b17023SJohn Marino	  __try
317*e4b17023SJohn Marino	    {
318*e4b17023SJohn Marino	      typedef ostreambuf_iterator<_CharT, _Traits>   _Iter;
319*e4b17023SJohn Marino	      typedef money_put<_CharT, _Iter>               _MoneyPut;
320*e4b17023SJohn Marino
321*e4b17023SJohn Marino	      const _MoneyPut& __mp = use_facet<_MoneyPut>(__os.getloc());
322*e4b17023SJohn Marino	      if (__mp.put(_Iter(__os.rdbuf()), __f._M_intl, __os,
323*e4b17023SJohn Marino			   __os.fill(), __f._M_mon).failed())
324*e4b17023SJohn Marino		__err |= ios_base::badbit;
325*e4b17023SJohn Marino	    }
326*e4b17023SJohn Marino	  __catch(__cxxabiv1::__forced_unwind&)
327*e4b17023SJohn Marino	    {
328*e4b17023SJohn Marino	      __os._M_setstate(ios_base::badbit);
329*e4b17023SJohn Marino	      __throw_exception_again;
330*e4b17023SJohn Marino	    }
331*e4b17023SJohn Marino	  __catch(...)
332*e4b17023SJohn Marino	    { __os._M_setstate(ios_base::badbit); }
333*e4b17023SJohn Marino	  if (__err)
334*e4b17023SJohn Marino	    __os.setstate(__err);
335*e4b17023SJohn Marino	}
336*e4b17023SJohn Marino      return __os;
337*e4b17023SJohn Marino    }
338*e4b17023SJohn Marino
339*e4b17023SJohn Marino#endif
340*e4b17023SJohn Marino
341*e4b17023SJohn Marino  // Inhibit implicit instantiations for required instantiations,
342*e4b17023SJohn Marino  // which are defined via explicit instantiations elsewhere.
343*e4b17023SJohn Marino  // NB:  This syntax is a GNU extension.
344*e4b17023SJohn Marino#if _GLIBCXX_EXTERN_TEMPLATE
345*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Setfill<char>);
346*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Setiosflags);
347*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Resetiosflags);
348*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Setbase);
349*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Setprecision);
350*e4b17023SJohn Marino  extern template ostream& operator<<(ostream&, _Setw);
351*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Setfill<char>);
352*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Setiosflags);
353*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Resetiosflags);
354*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Setbase);
355*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Setprecision);
356*e4b17023SJohn Marino  extern template istream& operator>>(istream&, _Setw);
357*e4b17023SJohn Marino
358*e4b17023SJohn Marino#ifdef _GLIBCXX_USE_WCHAR_T
359*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Setfill<wchar_t>);
360*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Setiosflags);
361*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Resetiosflags);
362*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Setbase);
363*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Setprecision);
364*e4b17023SJohn Marino  extern template wostream& operator<<(wostream&, _Setw);
365*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Setfill<wchar_t>);
366*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Setiosflags);
367*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Resetiosflags);
368*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Setbase);
369*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Setprecision);
370*e4b17023SJohn Marino  extern template wistream& operator>>(wistream&, _Setw);
371*e4b17023SJohn Marino#endif
372*e4b17023SJohn Marino#endif
373*e4b17023SJohn Marino
374*e4b17023SJohn Marino_GLIBCXX_END_NAMESPACE_VERSION
375*e4b17023SJohn Marino} // namespace
376*e4b17023SJohn Marino
377*e4b17023SJohn Marino#endif /* _GLIBCXX_IOMANIP */
378