1    	// Input streams -*- C++ -*-
2    	
3    	// Copyright (C) 1997-2013 Free Software Foundation, Inc.
4    	//
5    	// This file is part of the GNU ISO C++ Library.  This library is free
6    	// software; you can redistribute it and/or modify it under the
7    	// terms of the GNU General Public License as published by the
8    	// Free Software Foundation; either version 3, or (at your option)
9    	// any later version.
10   	
11   	// This library is distributed in the hope that it will be useful,
12   	// but WITHOUT ANY WARRANTY; without even the implied warranty of
13   	// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   	// GNU General Public License for more details.
15   	
16   	// Under Section 7 of GPL version 3, you are granted additional
17   	// permissions described in the GCC Runtime Library Exception, version
18   	// 3.1, as published by the Free Software Foundation.
19   	
20   	// You should have received a copy of the GNU General Public License and
21   	// a copy of the GCC Runtime Library Exception along with this program;
22   	// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23   	// <http://www.gnu.org/licenses/>.
24   	
25   	//
26   	// ISO C++ 14882: 27.6.1  Input streams
27   	//
28   	
29   	/** @file include/istream
30   	 *  This is a Standard C++ Library header.
31   	 */
32   	
33   	#ifndef _GLIBCXX_ISTREAM
34   	#define _GLIBCXX_ISTREAM 1
35   	
36   	#pragma GCC system_header
37   	
38   	#include <ios>
39   	#include <ostream>
40   	
41   	namespace std _GLIBCXX_VISIBILITY(default)
42   	{
43   	_GLIBCXX_BEGIN_NAMESPACE_VERSION
44   	
45   	  /**
46   	   *  @brief  Template class basic_istream.
47   	   *  @ingroup io
48   	   *
49   	   *  @tparam _CharT  Type of character stream.
50   	   *  @tparam _Traits  Traits for character type, defaults to
51   	   *                   char_traits<_CharT>.
52   	   *
53   	   *  This is the base class for all input streams.  It provides text
54   	   *  formatting of all builtin types, and communicates with any class
55   	   *  derived from basic_streambuf to do the actual input.
56   	  */
57   	  template<typename _CharT, typename _Traits>
58   	    class basic_istream : virtual public basic_ios<_CharT, _Traits>
59   	    {
60   	    public:
61   	      // Types (inherited from basic_ios (27.4.4)):
62   	      typedef _CharT			 		char_type;
63   	      typedef typename _Traits::int_type 		int_type;
64   	      typedef typename _Traits::pos_type 		pos_type;
65   	      typedef typename _Traits::off_type 		off_type;
66   	      typedef _Traits			 		traits_type;
67   	
68   	      // Non-standard Types:
69   	      typedef basic_streambuf<_CharT, _Traits> 		__streambuf_type;
70   	      typedef basic_ios<_CharT, _Traits>		__ios_type;
71   	      typedef basic_istream<_CharT, _Traits>		__istream_type;
72   	      typedef num_get<_CharT, istreambuf_iterator<_CharT, _Traits> >
73   	 							__num_get_type;
74   	      typedef ctype<_CharT>	      			__ctype_type;
75   	
76   	    protected:
77   	      // Data Members:
78   	      /**
79   	       *  The number of characters extracted in the previous unformatted
80   	       *  function; see gcount().
81   	      */
82   	      streamsize 		_M_gcount;
83   	
84   	    public:
85   	      /**
86   	       *  @brief  Base constructor.
87   	       *
88   	       *  This ctor is almost never called by the user directly, rather from
89   	       *  derived classes' initialization lists, which pass a pointer to
90   	       *  their own stream buffer.
91   	      */
92   	      explicit
93   	      basic_istream(__streambuf_type* __sb)
94   	      : _M_gcount(streamsize(0))
95   	      { this->init(__sb); }
96   	
97   	      /**
98   	       *  @brief  Base destructor.
99   	       *
100  	       *  This does very little apart from providing a virtual base dtor.
101  	      */
102  	      virtual
103  	      ~basic_istream()
104  	      { _M_gcount = streamsize(0); }
105  	
106  	      /// Safe prefix/suffix operations.
107  	      class sentry;
108  	      friend class sentry;
109  	
110  	      //@{
111  	      /**
112  	       *  @brief  Interface for manipulators.
113  	       *
114  	       *  Manipulators such as @c std::ws and @c std::dec use these
115  	       *  functions in constructs like
116  	       *  <code>std::cin >> std::ws</code>.
117  	       *  For more information, see the iomanip header.
118  	      */
119  	      __istream_type&
120  	      operator>>(__istream_type& (*__pf)(__istream_type&))
121  	      { return __pf(*this); }
122  	
123  	      __istream_type&
124  	      operator>>(__ios_type& (*__pf)(__ios_type&))
125  	      {
126  		__pf(*this);
127  		return *this;
128  	      }
129  	
130  	      __istream_type&
131  	      operator>>(ios_base& (*__pf)(ios_base&))
132  	      {
133  		__pf(*this);
134  		return *this;
135  	      }
136  	      //@}
137  	
138  	      //@{
139  	      /**
140  	       *  @name Extractors
141  	       *
142  	       *  All the @c operator>> functions (aka <em>formatted input
143  	       *  functions</em>) have some common behavior.  Each starts by
144  	       *  constructing a temporary object of type std::basic_istream::sentry
145  	       *  with the second argument (noskipws) set to false.  This has several
146  	       *  effects, concluding with the setting of a status flag; see the
147  	       *  sentry documentation for more.
148  	       *
149  	       *  If the sentry status is good, the function tries to extract
150  	       *  whatever data is appropriate for the type of the argument.
151  	       *
152  	       *  If an exception is thrown during extraction, ios_base::badbit
153  	       *  will be turned on in the stream's error state without causing an
154  	       *  ios_base::failure to be thrown.  The original exception will then
155  	       *  be rethrown.
156  	      */
157  	
158  	      //@{
159  	      /**
160  	       *  @brief  Integer arithmetic extractors
161  	       *  @param  __n A variable of builtin integral type.
162  	       *  @return  @c *this if successful
163  	       *
164  	       *  These functions use the stream's current locale (specifically, the
165  	       *  @c num_get facet) to parse the input data.
166  	      */
167  	      __istream_type&
168  	      operator>>(bool& __n)
169  	      { return _M_extract(__n); }
170  	
171  	      __istream_type&
172  	      operator>>(short& __n);
173  	
174  	      __istream_type&
175  	      operator>>(unsigned short& __n)
176  	      { return _M_extract(__n); }
177  	
178  	      __istream_type&
179  	      operator>>(int& __n);
180  	
181  	      __istream_type&
182  	      operator>>(unsigned int& __n)
183  	      { return _M_extract(__n); }
184  	
185  	      __istream_type&
186  	      operator>>(long& __n)
187  	      { return _M_extract(__n); }
188  	
189  	      __istream_type&
190  	      operator>>(unsigned long& __n)
191  	      { return _M_extract(__n); }
192  	
193  	#ifdef _GLIBCXX_USE_LONG_LONG
194  	      __istream_type&
195  	      operator>>(long long& __n)
196  	      { return _M_extract(__n); }
197  	
198  	      __istream_type&
199  	      operator>>(unsigned long long& __n)
200  	      { return _M_extract(__n); }
201  	#endif
202  	      //@}
203  	
204  	      //@{
205  	      /**
206  	       *  @brief  Floating point arithmetic extractors
207  	       *  @param  __f A variable of builtin floating point type.
208  	       *  @return  @c *this if successful
209  	       *
210  	       *  These functions use the stream's current locale (specifically, the
211  	       *  @c num_get facet) to parse the input data.
212  	      */
213  	      __istream_type&
214  	      operator>>(float& __f)
215  	      { return _M_extract(__f); }
216  	
217  	      __istream_type&
218  	      operator>>(double& __f)
219  	      { return _M_extract(__f); }
220  	
221  	      __istream_type&
222  	      operator>>(long double& __f)
223  	      { return _M_extract(__f); }
224  	      //@}
225  	
226  	      /**
227  	       *  @brief  Basic arithmetic extractors
228  	       *  @param  __p A variable of pointer type.
229  	       *  @return  @c *this if successful
230  	       *
231  	       *  These functions use the stream's current locale (specifically, the
232  	       *  @c num_get facet) to parse the input data.
233  	      */
234  	      __istream_type&
235  	      operator>>(void*& __p)
236  	      { return _M_extract(__p); }
237  	
238  	      /**
239  	       *  @brief  Extracting into another streambuf.
240  	       *  @param  __sb  A pointer to a streambuf
241  	       *
242  	       *  This function behaves like one of the basic arithmetic extractors,
243  	       *  in that it also constructs a sentry object and has the same error
244  	       *  handling behavior.
245  	       *
246  	       *  If @p __sb is NULL, the stream will set failbit in its error state.
247  	       *
248  	       *  Characters are extracted from this stream and inserted into the
249  	       *  @p __sb streambuf until one of the following occurs:
250  	       *
251  	       *  - the input stream reaches end-of-file,
252  	       *  - insertion into the output buffer fails (in this case, the
253  	       *    character that would have been inserted is not extracted), or
254  	       *  - an exception occurs (and in this case is caught)
255  	       *
256  	       *  If the function inserts no characters, failbit is set.
257  	      */
258  	      __istream_type&
259  	      operator>>(__streambuf_type* __sb);
260  	      //@}
261  	
262  	      // [27.6.1.3] unformatted input
263  	      /**
264  	       *  @brief  Character counting
265  	       *  @return  The number of characters extracted by the previous
266  	       *           unformatted input function dispatched for this stream.
267  	      */
268  	      streamsize
269  	      gcount() const
270  	      { return _M_gcount; }
271  	
272  	      //@{
273  	      /**
274  	       *  @name Unformatted Input Functions
275  	       *
276  	       *  All the unformatted input functions have some common behavior.
277  	       *  Each starts by constructing a temporary object of type
278  	       *  std::basic_istream::sentry with the second argument (noskipws)
279  	       *  set to true.  This has several effects, concluding with the
280  	       *  setting of a status flag; see the sentry documentation for more.
281  	       *
282  	       *  If the sentry status is good, the function tries to extract
283  	       *  whatever data is appropriate for the type of the argument.
284  	       *
285  	       *  The number of characters extracted is stored for later retrieval
286  	       *  by gcount().
287  	       *
288  	       *  If an exception is thrown during extraction, ios_base::badbit
289  	       *  will be turned on in the stream's error state without causing an
290  	       *  ios_base::failure to be thrown.  The original exception will then
291  	       *  be rethrown.
292  	      */
293  	
294  	      /**
295  	       *  @brief  Simple extraction.
296  	       *  @return  A character, or eof().
297  	       *
298  	       *  Tries to extract a character.  If none are available, sets failbit
299  	       *  and returns traits::eof().
300  	      */
301  	      int_type
302  	      get();
303  	
304  	      /**
305  	       *  @brief  Simple extraction.
306  	       *  @param  __c  The character in which to store data.
307  	       *  @return  *this
308  	       *
309  	       *  Tries to extract a character and store it in @a __c.  If none are
310  	       *  available, sets failbit and returns traits::eof().
311  	       *
312  	       *  @note  This function is not overloaded on signed char and
313  	       *         unsigned char.
314  	      */
315  	      __istream_type&
316  	      get(char_type& __c);
317  	
318  	      /**
319  	       *  @brief  Simple multiple-character extraction.
320  	       *  @param  __s  Pointer to an array.
321  	       *  @param  __n  Maximum number of characters to store in @a __s.
322  	       *  @param  __delim  A "stop" character.
323  	       *  @return  *this
324  	       *
325  	       *  Characters are extracted and stored into @a __s until one of the
326  	       *  following happens:
327  	       *
328  	       *  - @c __n-1 characters are stored
329  	       *  - the input sequence reaches EOF
330  	       *  - the next character equals @a __delim, in which case the character
331  	       *    is not extracted
332  	       *
333  	       * If no characters are stored, failbit is set in the stream's error
334  	       * state.
335  	       *
336  	       * In any case, a null character is stored into the next location in
337  	       * the array.
338  	       *
339  	       *  @note  This function is not overloaded on signed char and
340  	       *         unsigned char.
341  	      */
342  	      __istream_type&
343  	      get(char_type* __s, streamsize __n, char_type __delim);
344  	
345  	      /**
346  	       *  @brief  Simple multiple-character extraction.
347  	       *  @param  __s  Pointer to an array.
348  	       *  @param  __n  Maximum number of characters to store in @a s.
349  	       *  @return  *this
350  	       *
351  	       *  Returns @c get(__s,__n,widen(&apos;\\n&apos;)).
352  	      */
353  	      __istream_type&
354  	      get(char_type* __s, streamsize __n)
355  	      { return this->get(__s, __n, this->widen('\n')); }
356  	
357  	      /**
358  	       *  @brief  Extraction into another streambuf.
359  	       *  @param  __sb  A streambuf in which to store data.
360  	       *  @param  __delim  A "stop" character.
361  	       *  @return  *this
362  	       *
363  	       *  Characters are extracted and inserted into @a __sb until one of the
364  	       *  following happens:
365  	       *
366  	       *  - the input sequence reaches EOF
367  	       *  - insertion into the output buffer fails (in this case, the
368  	       *    character that would have been inserted is not extracted)
369  	       *  - the next character equals @a __delim (in this case, the character
370  	       *    is not extracted)
371  	       *  - an exception occurs (and in this case is caught)
372  	       *
373  	       * If no characters are stored, failbit is set in the stream's error
374  	       * state.
375  	      */
376  	      __istream_type&
377  	      get(__streambuf_type& __sb, char_type __delim);
378  	
379  	      /**
380  	       *  @brief  Extraction into another streambuf.
381  	       *  @param  __sb  A streambuf in which to store data.
382  	       *  @return  *this
383  	       *
384  	       *  Returns @c get(__sb,widen(&apos;\\n&apos;)).
385  	      */
386  	      __istream_type&
387  	      get(__streambuf_type& __sb)
388  	      { return this->get(__sb, this->widen('\n')); }
389  	
390  	      /**
391  	       *  @brief  String extraction.
392  	       *  @param  __s  A character array in which to store the data.
393  	       *  @param  __n  Maximum number of characters to extract.
394  	       *  @param  __delim  A "stop" character.
395  	       *  @return  *this
396  	       *
397  	       *  Extracts and stores characters into @a __s until one of the
398  	       *  following happens.  Note that these criteria are required to be
399  	       *  tested in the order listed here, to allow an input line to exactly
400  	       *  fill the @a __s array without setting failbit.
401  	       *
402  	       *  -# the input sequence reaches end-of-file, in which case eofbit
403  	       *     is set in the stream error state
404  	       *  -# the next character equals @c __delim, in which case the character
405  	       *     is extracted (and therefore counted in @c gcount()) but not stored
406  	       *  -# @c __n-1 characters are stored, in which case failbit is set
407  	       *     in the stream error state
408  	       *
409  	       *  If no characters are extracted, failbit is set.  (An empty line of
410  	       *  input should therefore not cause failbit to be set.)
411  	       *
412  	       *  In any case, a null character is stored in the next location in
413  	       *  the array.
414  	      */
415  	      __istream_type&
416  	      getline(char_type* __s, streamsize __n, char_type __delim);
417  	
418  	      /**
419  	       *  @brief  String extraction.
420  	       *  @param  __s  A character array in which to store the data.
421  	       *  @param  __n  Maximum number of characters to extract.
422  	       *  @return  *this
423  	       *
424  	       *  Returns @c getline(__s,__n,widen(&apos;\\n&apos;)).
425  	      */
426  	      __istream_type&
427  	      getline(char_type* __s, streamsize __n)
428  	      { return this->getline(__s, __n, this->widen('\n')); }
429  	
430  	      /**
431  	       *  @brief  Discarding characters
432  	       *  @param  __n  Number of characters to discard.
433  	       *  @param  __delim  A "stop" character.
434  	       *  @return  *this
435  	       *
436  	       *  Extracts characters and throws them away until one of the
437  	       *  following happens:
438  	       *  - if @a __n @c != @c std::numeric_limits<int>::max(), @a __n
439  	       *    characters are extracted
440  	       *  - the input sequence reaches end-of-file
441  	       *  - the next character equals @a __delim (in this case, the character
442  	       *    is extracted); note that this condition will never occur if
443  	       *    @a __delim equals @c traits::eof().
444  	       *
445  	       *  NB: Provide three overloads, instead of the single function
446  	       *  (with defaults) mandated by the Standard: this leads to a
447  	       *  better performing implementation, while still conforming to
448  	       *  the Standard.
449  	      */
450  	      __istream_type&
451  	      ignore(streamsize __n, int_type __delim);
452  	
453  	      __istream_type&
454  	      ignore(streamsize __n);
455  	
456  	      __istream_type&
457  	      ignore();
458  	
459  	      /**
460  	       *  @brief  Looking ahead in the stream
461  	       *  @return  The next character, or eof().
462  	       *
463  	       *  If, after constructing the sentry object, @c good() is false,
464  	       *  returns @c traits::eof().  Otherwise reads but does not extract
465  	       *  the next input character.
466  	      */
467  	      int_type
468  	      peek();
469  	
470  	      /**
471  	       *  @brief  Extraction without delimiters.
472  	       *  @param  __s  A character array.
473  	       *  @param  __n  Maximum number of characters to store.
474  	       *  @return  *this
475  	       *
476  	       *  If the stream state is @c good(), extracts characters and stores
477  	       *  them into @a __s until one of the following happens:
478  	       *  - @a __n characters are stored
479  	       *  - the input sequence reaches end-of-file, in which case the error
480  	       *    state is set to @c failbit|eofbit.
481  	       *
482  	       *  @note  This function is not overloaded on signed char and
483  	       *         unsigned char.
484  	      */
485  	      __istream_type&
486  	      read(char_type* __s, streamsize __n);
487  	
488  	      /**
489  	       *  @brief  Extraction until the buffer is exhausted, but no more.
490  	       *  @param  __s  A character array.
491  	       *  @param  __n  Maximum number of characters to store.
492  	       *  @return  The number of characters extracted.
493  	       *
494  	       *  Extracts characters and stores them into @a __s depending on the
495  	       *  number of characters remaining in the streambuf's buffer,
496  	       *  @c rdbuf()->in_avail(), called @c A here:
497  	       *  - if @c A @c == @c -1, sets eofbit and extracts no characters
498  	       *  - if @c A @c == @c 0, extracts no characters
499  	       *  - if @c A @c > @c 0, extracts @c min(A,n)
500  	       *
501  	       *  The goal is to empty the current buffer, and to not request any
502  	       *  more from the external input sequence controlled by the streambuf.
503  	      */
504  	      streamsize
505  	      readsome(char_type* __s, streamsize __n);
506  	
507  	      /**
508  	       *  @brief  Unextracting a single character.
509  	       *  @param  __c  The character to push back into the input stream.
510  	       *  @return  *this
511  	       *
512  	       *  If @c rdbuf() is not null, calls @c rdbuf()->sputbackc(c).
513  	       *
514  	       *  If @c rdbuf() is null or if @c sputbackc() fails, sets badbit in
515  	       *  the error state.
516  	       *
517  	       *  @note  This function first clears eofbit.  Since no characters
518  	       *         are extracted, the next call to @c gcount() will return 0,
519  	       *         as required by DR 60.
520  	      */
521  	      __istream_type&
522  	      putback(char_type __c);
523  	
524  	      /**
525  	       *  @brief  Unextracting the previous character.
526  	       *  @return  *this
527  	       *
528  	       *  If @c rdbuf() is not null, calls @c rdbuf()->sungetc(c).
529  	       *
530  	       *  If @c rdbuf() is null or if @c sungetc() fails, sets badbit in
531  	       *  the error state.
532  	       *
533  	       *  @note  This function first clears eofbit.  Since no characters
534  	       *         are extracted, the next call to @c gcount() will return 0,
535  	       *         as required by DR 60.
536  	      */
537  	      __istream_type&
538  	      unget();
539  	
540  	      /**
541  	       *  @brief  Synchronizing the stream buffer.
542  	       *  @return  0 on success, -1 on failure
543  	       *
544  	       *  If @c rdbuf() is a null pointer, returns -1.
545  	       *
546  	       *  Otherwise, calls @c rdbuf()->pubsync(), and if that returns -1,
547  	       *  sets badbit and returns -1.
548  	       *
549  	       *  Otherwise, returns 0.
550  	       *
551  	       *  @note  This function does not count the number of characters
552  	       *         extracted, if any, and therefore does not affect the next
553  	       *         call to @c gcount().
554  	      */
555  	      int
556  	      sync();
557  	
558  	      /**
559  	       *  @brief  Getting the current read position.
560  	       *  @return  A file position object.
561  	       *
562  	       *  If @c fail() is not false, returns @c pos_type(-1) to indicate
563  	       *  failure.  Otherwise returns @c rdbuf()->pubseekoff(0,cur,in).
564  	       *
565  	       *  @note  This function does not count the number of characters
566  	       *         extracted, if any, and therefore does not affect the next
567  	       *         call to @c gcount().  At variance with putback, unget and
568  	       *         seekg, eofbit is not cleared first.
569  	      */
570  	      pos_type
571  	      tellg();
572  	
573  	      /**
574  	       *  @brief  Changing the current read position.
575  	       *  @param  __pos  A file position object.
576  	       *  @return  *this
577  	       *
578  	       *  If @c fail() is not true, calls @c rdbuf()->pubseekpos(__pos).  If
579  	       *  that function fails, sets failbit.
580  	       *
581  	       *  @note  This function first clears eofbit.  It does not count the
582  	       *         number of characters extracted, if any, and therefore does
583  	       *         not affect the next call to @c gcount().
584  	      */
585  	      __istream_type&
586  	      seekg(pos_type);
587  	
588  	      /**
589  	       *  @brief  Changing the current read position.
590  	       *  @param  __off  A file offset object.
591  	       *  @param  __dir  The direction in which to seek.
592  	       *  @return  *this
593  	       *
594  	       *  If @c fail() is not true, calls @c rdbuf()->pubseekoff(__off,__dir).
595  	       *  If that function fails, sets failbit.
596  	       *
597  	       *  @note  This function first clears eofbit.  It does not count the
598  	       *         number of characters extracted, if any, and therefore does
599  	       *         not affect the next call to @c gcount().
600  	      */
601  	      __istream_type&
602  	      seekg(off_type, ios_base::seekdir);
603  	      //@}
604  	
605  	    protected:
606  	      basic_istream()
607  	      : _M_gcount(streamsize(0))
608  	      { this->init(0); }
609  	
610  	      template<typename _ValueT>
611  		__istream_type&
612  		_M_extract(_ValueT& __v);
613  	    };
614  	
615  	  /// Explicit specialization declarations, defined in src/istream.cc.
616  	  template<>
617  	    basic_istream<char>&
618  	    basic_istream<char>::
619  	    getline(char_type* __s, streamsize __n, char_type __delim);
620  	
621  	  template<>
622  	    basic_istream<char>&
623  	    basic_istream<char>::
624  	    ignore(streamsize __n);
625  	
626  	  template<>
627  	    basic_istream<char>&
628  	    basic_istream<char>::
629  	    ignore(streamsize __n, int_type __delim);
630  	
631  	#ifdef _GLIBCXX_USE_WCHAR_T
632  	  template<>
633  	    basic_istream<wchar_t>&
634  	    basic_istream<wchar_t>::
635  	    getline(char_type* __s, streamsize __n, char_type __delim);
636  	
637  	  template<>
638  	    basic_istream<wchar_t>&
639  	    basic_istream<wchar_t>::
640  	    ignore(streamsize __n);
641  	
642  	  template<>
643  	    basic_istream<wchar_t>&
644  	    basic_istream<wchar_t>::
645  	    ignore(streamsize __n, int_type __delim);
646  	#endif
647  	
648  	  /**
649  	   *  @brief  Performs setup work for input streams.
650  	   *
651  	   *  Objects of this class are created before all of the standard
652  	   *  extractors are run.  It is responsible for <em>exception-safe
653  	   *  prefix and suffix operations,</em> although only prefix actions
654  	   *  are currently required by the standard.
655  	  */
656  	  template<typename _CharT, typename _Traits>
657  	    class basic_istream<_CharT, _Traits>::sentry
658  	    {
659  	      // Data Members.
660  	      bool _M_ok;
661  	
662  	    public:
663  	      /// Easy access to dependent types.
664  	      typedef _Traits 					traits_type;
665  	      typedef basic_streambuf<_CharT, _Traits> 		__streambuf_type;
666  	      typedef basic_istream<_CharT, _Traits> 		__istream_type;
667  	      typedef typename __istream_type::__ctype_type 	__ctype_type;
668  	      typedef typename _Traits::int_type		__int_type;
669  	
670  	      /**
671  	       *  @brief  The constructor performs all the work.
672  	       *  @param  __is  The input stream to guard.
673  	       *  @param  __noskipws  Whether to consume whitespace or not.
674  	       *
675  	       *  If the stream state is good (@a __is.good() is true), then the
676  	       *  following actions are performed, otherwise the sentry state
677  	       *  is false (<em>not okay</em>) and failbit is set in the
678  	       *  stream state.
679  	       *
680  	       *  The sentry's preparatory actions are:
681  	       *
682  	       *  -# if the stream is tied to an output stream, @c is.tie()->flush()
683  	       *     is called to synchronize the output sequence
684  	       *  -# if @a __noskipws is false, and @c ios_base::skipws is set in
685  	       *     @c is.flags(), the sentry extracts and discards whitespace
686  	       *     characters from the stream.  The currently imbued locale is
687  	       *     used to determine whether each character is whitespace.
688  	       *
689  	       *  If the stream state is still good, then the sentry state becomes
690  	       *  true (@a okay).
691  	      */
692  	      explicit
693  	      sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
694  	
695  	      /**
696  	       *  @brief  Quick status checking.
697  	       *  @return  The sentry state.
698  	       *
699  	       *  For ease of use, sentries may be converted to booleans.  The
700  	       *  return value is that of the sentry state (true == okay).
701  	      */
702  	#if __cplusplus >= 201103L
703  	      explicit
704  	#endif
705  	      operator bool() const
706  	      { return _M_ok; }
707  	    };
708  	
709  	  //@{
710  	  /**
711  	   *  @brief  Character extractors
712  	   *  @param  __in  An input stream.
713  	   *  @param  __c  A character reference.
714  	   *  @return  in
715  	   *
716  	   *  Behaves like one of the formatted arithmetic extractors described in
717  	   *  std::basic_istream.  After constructing a sentry object with good
718  	   *  status, this function extracts a character (if one is available) and
719  	   *  stores it in @a __c.  Otherwise, sets failbit in the input stream.
720  	  */
721  	  template<typename _CharT, typename _Traits>
722  	    basic_istream<_CharT, _Traits>&
723  	    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c);
724  	
725  	  template<class _Traits>
726  	    inline basic_istream<char, _Traits>&
727  	    operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
728  	    { return (__in >> reinterpret_cast<char&>(__c)); }
729  	
730  	  template<class _Traits>
731  	    inline basic_istream<char, _Traits>&
732  	    operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
733  	    { return (__in >> reinterpret_cast<char&>(__c)); }
734  	  //@}
735  	
736  	  //@{
737  	  /**
738  	   *  @brief  Character string extractors
739  	   *  @param  __in  An input stream.
740  	   *  @param  __s  A pointer to a character array.
741  	   *  @return  __in
742  	   *
743  	   *  Behaves like one of the formatted arithmetic extractors described in
744  	   *  std::basic_istream.  After constructing a sentry object with good
745  	   *  status, this function extracts up to @c n characters and stores them
746  	   *  into the array starting at @a __s.  @c n is defined as:
747  	   *
748  	   *  - if @c width() is greater than zero, @c n is width() otherwise
749  	   *  - @c n is <em>the number of elements of the largest array of *
750  	   *  - @c char_type that can store a terminating @c eos.</em>
751  	   *  - [27.6.1.2.3]/6
752  	   *
753  	   *  Characters are extracted and stored until one of the following happens:
754  	   *  - @c n-1 characters are stored
755  	   *  - EOF is reached
756  	   *  - the next character is whitespace according to the current locale
757  	   *  - the next character is a null byte (i.e., @c charT() )
758  	   *
759  	   *  @c width(0) is then called for the input stream.
760  	   *
761  	   *  If no characters are extracted, sets failbit.
762  	  */
763  	  template<typename _CharT, typename _Traits>
764  	    basic_istream<_CharT, _Traits>&
765  	    operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s);
766  	
767  	  // Explicit specialization declaration, defined in src/istream.cc.
768  	  template<>
769  	    basic_istream<char>&
770  	    operator>>(basic_istream<char>& __in, char* __s);
771  	
772  	  template<class _Traits>
773  	    inline basic_istream<char, _Traits>&
774  	    operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
775  	    { return (__in >> reinterpret_cast<char*>(__s)); }
776  	
777  	  template<class _Traits>
778  	    inline basic_istream<char, _Traits>&
779  	    operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
780  	    { return (__in >> reinterpret_cast<char*>(__s)); }
781  	  //@}
782  	
783  	  /**
784  	   *  @brief  Template class basic_iostream
785  	   *  @ingroup io
786  	   *
787  	   *  @tparam _CharT  Type of character stream.
788  	   *  @tparam _Traits  Traits for character type, defaults to
789  	   *                   char_traits<_CharT>.
790  	   *
791  	   *  This class multiply inherits from the input and output stream classes
792  	   *  simply to provide a single interface.
793  	  */
794  	  template<typename _CharT, typename _Traits>
795  	    class basic_iostream
796  	    : public basic_istream<_CharT, _Traits>,
797  	      public basic_ostream<_CharT, _Traits>
798  	    {
799  	    public:
800  	      // _GLIBCXX_RESOLVE_LIB_DEFECTS
801  	      // 271. basic_iostream missing typedefs
802  	      // Types (inherited):
803  	      typedef _CharT			 		char_type;
804  	      typedef typename _Traits::int_type 		int_type;
805  	      typedef typename _Traits::pos_type 		pos_type;
806  	      typedef typename _Traits::off_type 		off_type;
807  	      typedef _Traits			 		traits_type;
808  	
809  	      // Non-standard Types:
810  	      typedef basic_istream<_CharT, _Traits>		__istream_type;
811  	      typedef basic_ostream<_CharT, _Traits>		__ostream_type;
812  	
813  	      /**
814  	       *  @brief  Constructor does nothing.
815  	       *
816  	       *  Both of the parent classes are initialized with the same
817  	       *  streambuf pointer passed to this constructor.
818  	      */
819  	      explicit
820  	      basic_iostream(basic_streambuf<_CharT, _Traits>* __sb)
821  	      : __istream_type(__sb), __ostream_type(__sb) { }
822  	
823  	      /**
824  	       *  @brief  Destructor does nothing.
825  	      */
826  	      virtual
827  	      ~basic_iostream() { }
828  	
829  	    protected:
830  	      basic_iostream()
831  	      : __istream_type(), __ostream_type() { }
832  	    };
833  	
834  	  /**
835  	   *  @brief  Quick and easy way to eat whitespace
836  	   *
837  	   *  This manipulator extracts whitespace characters, stopping when the
838  	   *  next character is non-whitespace, or when the input sequence is empty.
839  	   *  If the sequence is empty, @c eofbit is set in the stream, but not
840  	   *  @c failbit.
841  	   *
842  	   *  The current locale is used to distinguish whitespace characters.
843  	   *
844  	   *  Example:
845  	   *  @code
846  	   *     MyClass   mc;
847  	   *
848  	   *     std::cin >> std::ws >> mc;
849  	   *  @endcode
850  	   *  will skip leading whitespace before calling operator>> on cin and your
851  	   *  object.  Note that the same effect can be achieved by creating a
852  	   *  std::basic_istream::sentry inside your definition of operator>>.
853  	  */
854  	  template<typename _CharT, typename _Traits>
855  	    basic_istream<_CharT, _Traits>&
856  	    ws(basic_istream<_CharT, _Traits>& __is);
857  	
858  	#if __cplusplus >= 201103L
859  	  // [27.7.1.6] Rvalue stream extraction
860  	  /**
861  	   *  @brief  Generic extractor for rvalue stream
862  	   *  @param  __is  An input stream.
863  	   *  @param  __x  A reference to the extraction target.
864  	   *  @return  is
865  	   *
866  	   *  This is just a forwarding function to allow extraction from
867  	   *  rvalue streams since they won't bind to the extractor functions
868  	   *  that take an lvalue reference.
869  	  */
870  	  template<typename _CharT, typename _Traits, typename _Tp>
871  	    inline basic_istream<_CharT, _Traits>&
872  	    operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp& __x)
873  	    { return (__is >> __x); }
874  	#endif // C++11
875  	
876  	_GLIBCXX_END_NAMESPACE_VERSION
877  	} // namespace
878  	
879  	#include <bits/istream.tcc>
880  	
881  	#endif	/* _GLIBCXX_ISTREAM */
882