]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libc++/include/istream
Upgrade to OpenPAM Resedacea.
[FreeBSD/FreeBSD.git] / contrib / libc++ / include / istream
1 // -*- C++ -*-
2 //===--------------------------- istream ----------------------------------===//
3 //
4 //                     The LLVM Compiler Infrastructure
5 //
6 // This file is dual licensed under the MIT and the University of Illinois Open
7 // Source Licenses. See LICENSE.TXT for details.
8 //
9 //===----------------------------------------------------------------------===//
10
11 #ifndef _LIBCPP_ISTREAM
12 #define _LIBCPP_ISTREAM
13
14 /*
15     istream synopsis
16
17 template <class charT, class traits = char_traits<charT> >
18 class basic_istream
19     : virtual public basic_ios<charT,traits>
20 {
21 public:
22     // types (inherited from basic_ios (27.5.4)):
23     typedef charT                          char_type;
24     typedef traits                         traits_type;
25     typedef typename traits_type::int_type int_type;
26     typedef typename traits_type::pos_type pos_type;
27     typedef typename traits_type::off_type off_type;
28
29     // 27.7.1.1.1 Constructor/destructor:
30     explicit basic_istream(basic_streambuf<char_type, traits_type>* sb);
31     basic_istream(basic_istream&& rhs);
32     virtual ~basic_istream();
33
34     // 27.7.1.1.2 Assign/swap:
35     basic_istream& operator=(basic_istream&& rhs);
36     void swap(basic_istream& rhs);
37
38     // 27.7.1.1.3 Prefix/suffix:
39     class sentry;
40
41     // 27.7.1.2 Formatted input:
42     basic_istream& operator>>(basic_istream& (*pf)(basic_istream&));
43     basic_istream& operator>>(basic_ios<char_type, traits_type>&
44                               (*pf)(basic_ios<char_type, traits_type>&));
45     basic_istream& operator>>(ios_base& (*pf)(ios_base&));
46     basic_istream& operator>>(basic_streambuf<char_type, traits_type>* sb);
47     basic_istream& operator>>(bool& n);
48     basic_istream& operator>>(short& n);
49     basic_istream& operator>>(unsigned short& n);
50     basic_istream& operator>>(int& n);
51     basic_istream& operator>>(unsigned int& n);
52     basic_istream& operator>>(long& n);
53     basic_istream& operator>>(unsigned long& n);
54     basic_istream& operator>>(long long& n);
55     basic_istream& operator>>(unsigned long long& n);
56     basic_istream& operator>>(float& f);
57     basic_istream& operator>>(double& f);
58     basic_istream& operator>>(long double& f);
59     basic_istream& operator>>(void*& p);
60
61     // 27.7.1.3 Unformatted input:
62     streamsize gcount() const;
63     int_type get();
64     basic_istream& get(char_type& c);
65     basic_istream& get(char_type* s, streamsize n);
66     basic_istream& get(char_type* s, streamsize n, char_type delim);
67     basic_istream& get(basic_streambuf<char_type,traits_type>& sb);
68     basic_istream& get(basic_streambuf<char_type,traits_type>& sb, char_type delim);
69
70     basic_istream& getline(char_type* s, streamsize n);
71     basic_istream& getline(char_type* s, streamsize n, char_type delim);
72
73     basic_istream& ignore(streamsize n = 1, int_type delim = traits_type::eof());
74     int_type peek();
75     basic_istream& read (char_type* s, streamsize n);
76     streamsize readsome(char_type* s, streamsize n);
77
78     basic_istream& putback(char_type c);
79     basic_istream& unget();
80     int sync();
81
82     pos_type tellg();
83     basic_istream& seekg(pos_type);
84     basic_istream& seekg(off_type, ios_base::seekdir);
85 protected:
86     basic_istream(const basic_istream& rhs) = delete;
87     basic_istream(basic_istream&& rhs);
88     // 27.7.2.1.2 Assign/swap:
89     basic_istream& operator=(const basic_istream& rhs) = delete;
90     basic_istream& operator=(basic_istream&& rhs);
91     void swap(basic_istream& rhs);
92 };
93
94 // 27.7.1.2.3 character extraction templates:
95 template<class charT, class traits>
96   basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT&);
97
98 template<class traits>
99   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char&);
100
101 template<class traits>
102   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char&);
103
104 template<class charT, class traits>
105   basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&, charT*);
106
107 template<class traits>
108   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, unsigned char*);
109
110 template<class traits>
111   basic_istream<char,traits>& operator>>(basic_istream<char,traits>&, signed char*);
112
113 template <class charT, class traits>
114   void
115   swap(basic_istream<charT, traits>& x, basic_istream<charT, traits>& y);
116
117 typedef basic_istream<char> istream;
118 typedef basic_istream<wchar_t> wistream;
119
120 template <class charT, class traits = char_traits<charT> >
121 class basic_iostream :
122     public basic_istream<charT,traits>,
123     public basic_ostream<charT,traits>
124 {
125 public:
126     // types:
127     typedef charT                          char_type;
128     typedef traits                         traits_type;
129     typedef typename traits_type::int_type int_type;
130     typedef typename traits_type::pos_type pos_type;
131     typedef typename traits_type::off_type off_type;
132
133     // constructor/destructor
134     explicit basic_iostream(basic_streambuf<char_type, traits_type>* sb);
135     basic_iostream(basic_iostream&& rhs);
136     virtual ~basic_iostream();
137
138     // assign/swap
139     basic_iostream& operator=(basic_iostream&& rhs);
140     void swap(basic_iostream& rhs);
141 };
142
143 template <class charT, class traits>
144   void
145   swap(basic_iostream<charT, traits>& x, basic_iostream<charT, traits>& y);
146
147 typedef basic_iostream<char> iostream;
148 typedef basic_iostream<wchar_t> wiostream;
149
150 template <class charT, class traits>
151   basic_istream<charT,traits>&
152   ws(basic_istream<charT,traits>& is);
153
154 template <class charT, class traits, class T>
155   basic_istream<charT, traits>&
156   operator>>(basic_istream<charT, traits>&& is, T& x);
157
158 }  // std
159
160 */
161
162 #include <__config>
163 #include <ostream>
164
165 #include <__undef_min_max>
166
167 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
168 #pragma GCC system_header
169 #endif
170
171 _LIBCPP_BEGIN_NAMESPACE_STD
172
173 template <class _CharT, class _Traits>
174 class _LIBCPP_TEMPLATE_VIS basic_istream
175     : virtual public basic_ios<_CharT, _Traits>
176 {
177     streamsize __gc_;
178 public:
179     // types (inherited from basic_ios (27.5.4)):
180     typedef _CharT                         char_type;
181     typedef _Traits                        traits_type;
182     typedef typename traits_type::int_type int_type;
183     typedef typename traits_type::pos_type pos_type;
184     typedef typename traits_type::off_type off_type;
185
186     // 27.7.1.1.1 Constructor/destructor:
187     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
188     explicit basic_istream(basic_streambuf<char_type, traits_type>* __sb) : __gc_(0)
189     { this->init(__sb); }
190     virtual ~basic_istream();
191 protected:
192 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
193     inline _LIBCPP_INLINE_VISIBILITY
194     basic_istream(basic_istream&& __rhs);
195 #endif
196     // 27.7.1.1.2 Assign/swap:
197 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
198     inline _LIBCPP_INLINE_VISIBILITY
199     basic_istream& operator=(basic_istream&& __rhs);
200 #endif
201
202     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
203     void swap(basic_istream& __rhs) {
204       _VSTD::swap(__gc_, __rhs.__gc_);
205       basic_ios<char_type, traits_type>::swap(__rhs);
206     }
207
208 #ifndef _LIBCPP_CXX03_LANG
209     basic_istream           (const basic_istream& __rhs) = delete;
210     basic_istream& operator=(const basic_istream& __rhs) = delete;
211 #endif
212 public:
213
214     // 27.7.1.1.3 Prefix/suffix:
215     class _LIBCPP_TEMPLATE_VIS sentry;
216
217     // 27.7.1.2 Formatted input:
218     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
219     basic_istream& operator>>(basic_istream& (*__pf)(basic_istream&))
220     { return __pf(*this); }
221
222     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
223     basic_istream& operator>>(basic_ios<char_type, traits_type>&
224                               (*__pf)(basic_ios<char_type, traits_type>&))
225     { __pf(*this); return *this; }
226
227     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
228     basic_istream& operator>>(ios_base& (*__pf)(ios_base&))
229     { __pf(*this); return *this; }
230
231     basic_istream& operator>>(basic_streambuf<char_type, traits_type>* __sb);
232     basic_istream& operator>>(bool& __n);
233     basic_istream& operator>>(short& __n);
234     basic_istream& operator>>(unsigned short& __n);
235     basic_istream& operator>>(int& __n);
236     basic_istream& operator>>(unsigned int& __n);
237     basic_istream& operator>>(long& __n);
238     basic_istream& operator>>(unsigned long& __n);
239     basic_istream& operator>>(long long& __n);
240     basic_istream& operator>>(unsigned long long& __n);
241     basic_istream& operator>>(float& __f);
242     basic_istream& operator>>(double& __f);
243     basic_istream& operator>>(long double& __f);
244     basic_istream& operator>>(void*& __p);
245
246     // 27.7.1.3 Unformatted input:
247     _LIBCPP_INLINE_VISIBILITY
248     streamsize gcount() const {return __gc_;}
249     int_type get();
250
251     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
252     basic_istream& get(char_type& __c) {
253       int_type __ch = get();
254       if (__ch != traits_type::eof())
255         __c = traits_type::to_char_type(__ch);
256       return *this;
257     }
258
259     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
260     basic_istream& get(char_type* __s, streamsize __n)
261     { return get(__s, __n, this->widen('\n')); }
262
263     basic_istream& get(char_type* __s, streamsize __n, char_type __dlm);
264
265     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
266     basic_istream& get(basic_streambuf<char_type, traits_type>& __sb)
267     { return get(__sb, this->widen('\n')); }
268
269     basic_istream& get(basic_streambuf<char_type, traits_type>& __sb, char_type __dlm);
270
271     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
272     basic_istream& getline(char_type* __s, streamsize __n)
273     { return getline(__s, __n, this->widen('\n')); }
274
275     basic_istream& getline(char_type* __s, streamsize __n, char_type __dlm);
276
277     basic_istream& ignore(streamsize __n = 1, int_type __dlm = traits_type::eof());
278     int_type peek();
279     basic_istream& read (char_type* __s, streamsize __n);
280     streamsize readsome(char_type* __s, streamsize __n);
281
282     basic_istream& putback(char_type __c);
283     basic_istream& unget();
284     int sync();
285
286     pos_type tellg();
287     basic_istream& seekg(pos_type __pos);
288     basic_istream& seekg(off_type __off, ios_base::seekdir __dir);
289 };
290
291 template <class _CharT, class _Traits>
292 class _LIBCPP_TEMPLATE_VIS basic_istream<_CharT, _Traits>::sentry
293 {
294     bool __ok_;
295
296     sentry(const sentry&); // = delete;
297     sentry& operator=(const sentry&); // = delete;
298
299 public:
300     explicit sentry(basic_istream<_CharT, _Traits>& __is, bool __noskipws = false);
301 //    ~sentry() = default;
302
303     _LIBCPP_INLINE_VISIBILITY
304         _LIBCPP_EXPLICIT
305         operator bool() const {return __ok_;}
306 };
307
308 template <class _CharT, class _Traits>
309 basic_istream<_CharT, _Traits>::sentry::sentry(basic_istream<_CharT, _Traits>& __is,
310                                                bool __noskipws)
311     : __ok_(false)
312 {
313     if (__is.good())
314     {
315         if (__is.tie())
316             __is.tie()->flush();
317         if (!__noskipws && (__is.flags() & ios_base::skipws))
318         {
319             typedef istreambuf_iterator<_CharT, _Traits> _Ip;
320             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
321             _Ip __i(__is);
322             _Ip __eof;
323             for (; __i != __eof; ++__i)
324                 if (!__ct.is(__ct.space, *__i))
325                     break;
326             if (__i == __eof)
327                 __is.setstate(ios_base::failbit | ios_base::eofbit);
328         }
329         __ok_ = __is.good();
330     }
331     else
332         __is.setstate(ios_base::failbit);
333 }
334
335 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
336
337 template <class _CharT, class _Traits>
338 basic_istream<_CharT, _Traits>::basic_istream(basic_istream&& __rhs)
339     : __gc_(__rhs.__gc_)
340 {
341     __rhs.__gc_ = 0;
342     this->move(__rhs);
343 }
344
345 template <class _CharT, class _Traits>
346 basic_istream<_CharT, _Traits>&
347 basic_istream<_CharT, _Traits>::operator=(basic_istream&& __rhs)
348 {
349     swap(__rhs);
350     return *this;
351 }
352
353 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
354
355 template <class _CharT, class _Traits>
356 basic_istream<_CharT, _Traits>::~basic_istream()
357 {
358 }
359
360 template <class _CharT, class _Traits>
361 basic_istream<_CharT, _Traits>&
362 basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
363 {
364 #ifndef _LIBCPP_NO_EXCEPTIONS
365     try
366     {
367 #endif  // _LIBCPP_NO_EXCEPTIONS
368         sentry __s(*this);
369         if (__s)
370         {
371             typedef istreambuf_iterator<char_type, traits_type> _Ip;
372             typedef num_get<char_type, _Ip> _Fp;
373             ios_base::iostate __err = ios_base::goodbit;
374             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
375             this->setstate(__err);
376         }
377 #ifndef _LIBCPP_NO_EXCEPTIONS
378     }
379     catch (...)
380     {
381         this->__set_badbit_and_consider_rethrow();
382     }
383 #endif  // _LIBCPP_NO_EXCEPTIONS
384     return *this;
385 }
386
387 template <class _CharT, class _Traits>
388 basic_istream<_CharT, _Traits>&
389 basic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
390 {
391 #ifndef _LIBCPP_NO_EXCEPTIONS
392     try
393     {
394 #endif  // _LIBCPP_NO_EXCEPTIONS
395         sentry __s(*this);
396         if (__s)
397         {
398             typedef istreambuf_iterator<char_type, traits_type> _Ip;
399             typedef num_get<char_type, _Ip> _Fp;
400             ios_base::iostate __err = ios_base::goodbit;
401             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
402             this->setstate(__err);
403         }
404 #ifndef _LIBCPP_NO_EXCEPTIONS
405     }
406     catch (...)
407     {
408         this->__set_badbit_and_consider_rethrow();
409     }
410 #endif  // _LIBCPP_NO_EXCEPTIONS
411     return *this;
412 }
413
414 template <class _CharT, class _Traits>
415 basic_istream<_CharT, _Traits>&
416 basic_istream<_CharT, _Traits>::operator>>(long& __n)
417 {
418 #ifndef _LIBCPP_NO_EXCEPTIONS
419     try
420     {
421 #endif  // _LIBCPP_NO_EXCEPTIONS
422         sentry __s(*this);
423         if (__s)
424         {
425             typedef istreambuf_iterator<char_type, traits_type> _Ip;
426             typedef num_get<char_type, _Ip> _Fp;
427             ios_base::iostate __err = ios_base::goodbit;
428             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
429             this->setstate(__err);
430         }
431 #ifndef _LIBCPP_NO_EXCEPTIONS
432     }
433     catch (...)
434     {
435         this->__set_badbit_and_consider_rethrow();
436     }
437 #endif  // _LIBCPP_NO_EXCEPTIONS
438     return *this;
439 }
440
441 template <class _CharT, class _Traits>
442 basic_istream<_CharT, _Traits>&
443 basic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
444 {
445 #ifndef _LIBCPP_NO_EXCEPTIONS
446     try
447     {
448 #endif  // _LIBCPP_NO_EXCEPTIONS
449         sentry __s(*this);
450         if (__s)
451         {
452             typedef istreambuf_iterator<char_type, traits_type> _Ip;
453             typedef num_get<char_type, _Ip> _Fp;
454             ios_base::iostate __err = ios_base::goodbit;
455             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
456             this->setstate(__err);
457         }
458 #ifndef _LIBCPP_NO_EXCEPTIONS
459     }
460     catch (...)
461     {
462         this->__set_badbit_and_consider_rethrow();
463     }
464 #endif  // _LIBCPP_NO_EXCEPTIONS
465     return *this;
466 }
467
468 template <class _CharT, class _Traits>
469 basic_istream<_CharT, _Traits>&
470 basic_istream<_CharT, _Traits>::operator>>(long long& __n)
471 {
472 #ifndef _LIBCPP_NO_EXCEPTIONS
473     try
474     {
475 #endif  // _LIBCPP_NO_EXCEPTIONS
476         sentry __s(*this);
477         if (__s)
478         {
479             typedef istreambuf_iterator<char_type, traits_type> _Ip;
480             typedef num_get<char_type, _Ip> _Fp;
481             ios_base::iostate __err = ios_base::goodbit;
482             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
483             this->setstate(__err);
484         }
485 #ifndef _LIBCPP_NO_EXCEPTIONS
486     }
487     catch (...)
488     {
489         this->__set_badbit_and_consider_rethrow();
490     }
491 #endif  // _LIBCPP_NO_EXCEPTIONS
492     return *this;
493 }
494
495 template <class _CharT, class _Traits>
496 basic_istream<_CharT, _Traits>&
497 basic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n)
498 {
499 #ifndef _LIBCPP_NO_EXCEPTIONS
500     try
501     {
502 #endif  // _LIBCPP_NO_EXCEPTIONS
503         sentry __s(*this);
504         if (__s)
505         {
506             typedef istreambuf_iterator<char_type, traits_type> _Ip;
507             typedef num_get<char_type, _Ip> _Fp;
508             ios_base::iostate __err = ios_base::goodbit;
509             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
510             this->setstate(__err);
511         }
512 #ifndef _LIBCPP_NO_EXCEPTIONS
513     }
514     catch (...)
515     {
516         this->__set_badbit_and_consider_rethrow();
517     }
518 #endif  // _LIBCPP_NO_EXCEPTIONS
519     return *this;
520 }
521
522 template <class _CharT, class _Traits>
523 basic_istream<_CharT, _Traits>&
524 basic_istream<_CharT, _Traits>::operator>>(float& __n)
525 {
526 #ifndef _LIBCPP_NO_EXCEPTIONS
527     try
528     {
529 #endif  // _LIBCPP_NO_EXCEPTIONS
530         sentry __s(*this);
531         if (__s)
532         {
533             typedef istreambuf_iterator<char_type, traits_type> _Ip;
534             typedef num_get<char_type, _Ip> _Fp;
535             ios_base::iostate __err = ios_base::goodbit;
536             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
537             this->setstate(__err);
538         }
539 #ifndef _LIBCPP_NO_EXCEPTIONS
540     }
541     catch (...)
542     {
543         this->__set_badbit_and_consider_rethrow();
544     }
545 #endif  // _LIBCPP_NO_EXCEPTIONS
546     return *this;
547 }
548
549 template <class _CharT, class _Traits>
550 basic_istream<_CharT, _Traits>&
551 basic_istream<_CharT, _Traits>::operator>>(double& __n)
552 {
553 #ifndef _LIBCPP_NO_EXCEPTIONS
554     try
555     {
556 #endif  // _LIBCPP_NO_EXCEPTIONS
557         sentry __s(*this);
558         if (__s)
559         {
560             typedef istreambuf_iterator<char_type, traits_type> _Ip;
561             typedef num_get<char_type, _Ip> _Fp;
562             ios_base::iostate __err = ios_base::goodbit;
563             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
564             this->setstate(__err);
565         }
566 #ifndef _LIBCPP_NO_EXCEPTIONS
567     }
568     catch (...)
569     {
570         this->__set_badbit_and_consider_rethrow();
571     }
572 #endif  // _LIBCPP_NO_EXCEPTIONS
573     return *this;
574 }
575
576 template <class _CharT, class _Traits>
577 basic_istream<_CharT, _Traits>&
578 basic_istream<_CharT, _Traits>::operator>>(long double& __n)
579 {
580 #ifndef _LIBCPP_NO_EXCEPTIONS
581     try
582     {
583 #endif  // _LIBCPP_NO_EXCEPTIONS
584         sentry __s(*this);
585         if (__s)
586         {
587             typedef istreambuf_iterator<char_type, traits_type> _Ip;
588             typedef num_get<char_type, _Ip> _Fp;
589             ios_base::iostate __err = ios_base::goodbit;
590             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
591             this->setstate(__err);
592         }
593 #ifndef _LIBCPP_NO_EXCEPTIONS
594     }
595     catch (...)
596     {
597         this->__set_badbit_and_consider_rethrow();
598     }
599 #endif  // _LIBCPP_NO_EXCEPTIONS
600     return *this;
601 }
602
603 template <class _CharT, class _Traits>
604 basic_istream<_CharT, _Traits>&
605 basic_istream<_CharT, _Traits>::operator>>(bool& __n)
606 {
607 #ifndef _LIBCPP_NO_EXCEPTIONS
608     try
609     {
610 #endif  // _LIBCPP_NO_EXCEPTIONS
611         sentry __s(*this);
612         if (__s)
613         {
614             typedef istreambuf_iterator<char_type, traits_type> _Ip;
615             typedef num_get<char_type, _Ip> _Fp;
616             ios_base::iostate __err = ios_base::goodbit;
617             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
618             this->setstate(__err);
619         }
620 #ifndef _LIBCPP_NO_EXCEPTIONS
621     }
622     catch (...)
623     {
624         this->__set_badbit_and_consider_rethrow();
625     }
626 #endif  // _LIBCPP_NO_EXCEPTIONS
627     return *this;
628 }
629
630 template <class _CharT, class _Traits>
631 basic_istream<_CharT, _Traits>&
632 basic_istream<_CharT, _Traits>::operator>>(void*& __n)
633 {
634 #ifndef _LIBCPP_NO_EXCEPTIONS
635     try
636     {
637 #endif  // _LIBCPP_NO_EXCEPTIONS
638         sentry __s(*this);
639         if (__s)
640         {
641             typedef istreambuf_iterator<char_type, traits_type> _Ip;
642             typedef num_get<char_type, _Ip> _Fp;
643             ios_base::iostate __err = ios_base::goodbit;
644             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
645             this->setstate(__err);
646         }
647 #ifndef _LIBCPP_NO_EXCEPTIONS
648     }
649     catch (...)
650     {
651         this->__set_badbit_and_consider_rethrow();
652     }
653 #endif  // _LIBCPP_NO_EXCEPTIONS
654     return *this;
655 }
656
657 template <class _CharT, class _Traits>
658 basic_istream<_CharT, _Traits>&
659 basic_istream<_CharT, _Traits>::operator>>(short& __n)
660 {
661 #ifndef _LIBCPP_NO_EXCEPTIONS
662     try
663     {
664 #endif  // _LIBCPP_NO_EXCEPTIONS
665         sentry __s(*this);
666         if (__s)
667         {
668             typedef istreambuf_iterator<char_type, traits_type> _Ip;
669             typedef num_get<char_type, _Ip> _Fp;
670             ios_base::iostate __err = ios_base::goodbit;
671             long __temp;
672             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
673             if (__temp < numeric_limits<short>::min())
674             {
675                 __err |= ios_base::failbit;
676                 __n = numeric_limits<short>::min();
677             }
678             else if (__temp > numeric_limits<short>::max())
679             {
680                 __err |= ios_base::failbit;
681                 __n = numeric_limits<short>::max();
682             }
683             else
684                 __n = static_cast<short>(__temp);
685             this->setstate(__err);
686         }
687 #ifndef _LIBCPP_NO_EXCEPTIONS
688     }
689     catch (...)
690     {
691         this->__set_badbit_and_consider_rethrow();
692     }
693 #endif  // _LIBCPP_NO_EXCEPTIONS
694     return *this;
695 }
696
697 template <class _CharT, class _Traits>
698 basic_istream<_CharT, _Traits>&
699 basic_istream<_CharT, _Traits>::operator>>(int& __n)
700 {
701 #ifndef _LIBCPP_NO_EXCEPTIONS
702     try
703     {
704 #endif  // _LIBCPP_NO_EXCEPTIONS
705         sentry __s(*this);
706         if (__s)
707         {
708             typedef istreambuf_iterator<char_type, traits_type> _Ip;
709             typedef num_get<char_type, _Ip> _Fp;
710             ios_base::iostate __err = ios_base::goodbit;
711             long __temp;
712             use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
713             if (__temp < numeric_limits<int>::min())
714             {
715                 __err |= ios_base::failbit;
716                 __n = numeric_limits<int>::min();
717             }
718             else if (__temp > numeric_limits<int>::max())
719             {
720                 __err |= ios_base::failbit;
721                 __n = numeric_limits<int>::max();
722             }
723             else
724                 __n = static_cast<int>(__temp);
725             this->setstate(__err);
726         }
727 #ifndef _LIBCPP_NO_EXCEPTIONS
728     }
729     catch (...)
730     {
731         this->__set_badbit_and_consider_rethrow();
732     }
733 #endif  // _LIBCPP_NO_EXCEPTIONS
734     return *this;
735 }
736
737 template<class _CharT, class _Traits>
738 basic_istream<_CharT, _Traits>&
739 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT* __s)
740 {
741 #ifndef _LIBCPP_NO_EXCEPTIONS
742     try
743     {
744 #endif  // _LIBCPP_NO_EXCEPTIONS
745         typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
746         if (__sen)
747         {
748             streamsize __n = __is.width();
749             if (__n <= 0)
750                 __n = numeric_limits<streamsize>::max() / sizeof(_CharT) - 1;
751             streamsize __c = 0;
752             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
753             ios_base::iostate __err = ios_base::goodbit;
754             while (__c < __n-1)
755             {
756                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
757                 if (_Traits::eq_int_type(__i, _Traits::eof()))
758                 {
759                    __err |= ios_base::eofbit;
760                    break;
761                 }
762                 _CharT __ch = _Traits::to_char_type(__i);
763                 if (__ct.is(__ct.space, __ch))
764                     break;
765                 *__s++ = __ch;
766                 ++__c;
767                  __is.rdbuf()->sbumpc();
768             }
769             *__s = _CharT();
770             __is.width(0);
771             if (__c == 0)
772                __err |= ios_base::failbit;
773             __is.setstate(__err);
774         }
775 #ifndef _LIBCPP_NO_EXCEPTIONS
776     }
777     catch (...)
778     {
779         __is.__set_badbit_and_consider_rethrow();
780     }
781 #endif  // _LIBCPP_NO_EXCEPTIONS
782     return __is;
783 }
784
785 template<class _Traits>
786 inline _LIBCPP_INLINE_VISIBILITY
787 basic_istream<char, _Traits>&
788 operator>>(basic_istream<char, _Traits>& __is, unsigned char* __s)
789 {
790     return __is >> (char*)__s;
791 }
792
793 template<class _Traits>
794 inline _LIBCPP_INLINE_VISIBILITY
795 basic_istream<char, _Traits>&
796 operator>>(basic_istream<char, _Traits>& __is, signed char* __s)
797 {
798     return __is >> (char*)__s;
799 }
800
801 template<class _CharT, class _Traits>
802 basic_istream<_CharT, _Traits>&
803 operator>>(basic_istream<_CharT, _Traits>& __is, _CharT& __c)
804 {
805 #ifndef _LIBCPP_NO_EXCEPTIONS
806     try
807     {
808 #endif  // _LIBCPP_NO_EXCEPTIONS
809         typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
810         if (__sen)
811         {
812             typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
813             if (_Traits::eq_int_type(__i, _Traits::eof()))
814                 __is.setstate(ios_base::eofbit | ios_base::failbit);
815             else
816                 __c = _Traits::to_char_type(__i);
817         }
818 #ifndef _LIBCPP_NO_EXCEPTIONS
819     }
820     catch (...)
821     {
822         __is.__set_badbit_and_consider_rethrow();
823     }
824 #endif  // _LIBCPP_NO_EXCEPTIONS
825     return __is;
826 }
827
828 template<class _Traits>
829 inline _LIBCPP_INLINE_VISIBILITY
830 basic_istream<char, _Traits>&
831 operator>>(basic_istream<char, _Traits>& __is, unsigned char& __c)
832 {
833     return __is >> (char&)__c;
834 }
835
836 template<class _Traits>
837 inline _LIBCPP_INLINE_VISIBILITY
838 basic_istream<char, _Traits>&
839 operator>>(basic_istream<char, _Traits>& __is, signed char& __c)
840 {
841     return __is >> (char&)__c;
842 }
843
844 template<class _CharT, class _Traits>
845 basic_istream<_CharT, _Traits>&
846 basic_istream<_CharT, _Traits>::operator>>(basic_streambuf<char_type, traits_type>* __sb)
847 {
848     __gc_ = 0;
849 #ifndef _LIBCPP_NO_EXCEPTIONS
850     try
851     {
852 #endif  // _LIBCPP_NO_EXCEPTIONS
853         sentry __s(*this, true);
854         if (__s)
855         {
856             if (__sb)
857             {
858 #ifndef _LIBCPP_NO_EXCEPTIONS
859                 try
860                 {
861 #endif  // _LIBCPP_NO_EXCEPTIONS
862                     ios_base::iostate __err = ios_base::goodbit;
863                     while (true)
864                     {
865                         typename traits_type::int_type __i = this->rdbuf()->sgetc();
866                         if (traits_type::eq_int_type(__i, _Traits::eof()))
867                         {
868                            __err |= ios_base::eofbit;
869                            break;
870                         }
871                         if (traits_type::eq_int_type(
872                                 __sb->sputc(traits_type::to_char_type(__i)),
873                                 traits_type::eof()))
874                             break;
875                         ++__gc_;
876                         this->rdbuf()->sbumpc();
877                     }
878                     if (__gc_ == 0)
879                        __err |= ios_base::failbit;
880                     this->setstate(__err);
881 #ifndef _LIBCPP_NO_EXCEPTIONS
882                 }
883                 catch (...)
884                 {
885                     if (__gc_ == 0)
886                         this->__set_failbit_and_consider_rethrow();
887                 }
888 #endif  // _LIBCPP_NO_EXCEPTIONS
889             }
890             else
891                 this->setstate(ios_base::failbit);
892         }
893 #ifndef _LIBCPP_NO_EXCEPTIONS
894     }
895     catch (...)
896     {
897         this->__set_badbit_and_consider_rethrow();
898     }
899 #endif  // _LIBCPP_NO_EXCEPTIONS
900     return *this;
901 }
902
903 template<class _CharT, class _Traits>
904 typename basic_istream<_CharT, _Traits>::int_type
905 basic_istream<_CharT, _Traits>::get()
906 {
907     __gc_ = 0;
908     int_type __r = traits_type::eof();
909 #ifndef _LIBCPP_NO_EXCEPTIONS
910     try
911     {
912 #endif  // _LIBCPP_NO_EXCEPTIONS
913         sentry __s(*this, true);
914         if (__s)
915         {
916             __r = this->rdbuf()->sbumpc();
917             if (traits_type::eq_int_type(__r, traits_type::eof()))
918                this->setstate(ios_base::failbit | ios_base::eofbit);
919             else
920                 __gc_ = 1;
921         }
922 #ifndef _LIBCPP_NO_EXCEPTIONS
923     }
924     catch (...)
925     {
926         this->__set_badbit_and_consider_rethrow();
927     }
928 #endif  // _LIBCPP_NO_EXCEPTIONS
929     return __r;
930 }
931
932 template<class _CharT, class _Traits>
933 basic_istream<_CharT, _Traits>&
934 basic_istream<_CharT, _Traits>::get(char_type* __s, streamsize __n, char_type __dlm)
935 {
936     __gc_ = 0;
937 #ifndef _LIBCPP_NO_EXCEPTIONS
938     try
939     {
940 #endif  // _LIBCPP_NO_EXCEPTIONS
941         sentry __sen(*this, true);
942         if (__sen)
943         {
944             if (__n > 0)
945             {
946                 ios_base::iostate __err = ios_base::goodbit;
947                 while (__gc_ < __n-1)
948                 {
949                     int_type __i = this->rdbuf()->sgetc();
950                     if (traits_type::eq_int_type(__i, traits_type::eof()))
951                     {
952                        __err |= ios_base::eofbit;
953                        break;
954                     }
955                     char_type __ch = traits_type::to_char_type(__i);
956                     if (traits_type::eq(__ch, __dlm))
957                         break;
958                     *__s++ = __ch;
959                     ++__gc_;
960                      this->rdbuf()->sbumpc();
961                 }
962                 *__s = char_type();
963                 if (__gc_ == 0)
964                    __err |= ios_base::failbit;
965                 this->setstate(__err);
966             }
967             else
968                 this->setstate(ios_base::failbit);
969         }
970 #ifndef _LIBCPP_NO_EXCEPTIONS
971     }
972     catch (...)
973     {
974         this->__set_badbit_and_consider_rethrow();
975     }
976 #endif  // _LIBCPP_NO_EXCEPTIONS
977     return *this;
978 }
979
980 template<class _CharT, class _Traits>
981 basic_istream<_CharT, _Traits>&
982 basic_istream<_CharT, _Traits>::get(basic_streambuf<char_type, traits_type>& __sb,
983                                     char_type __dlm)
984 {
985     __gc_ = 0;
986 #ifndef _LIBCPP_NO_EXCEPTIONS
987     try
988     {
989 #endif  // _LIBCPP_NO_EXCEPTIONS
990         sentry __sen(*this, true);
991         if (__sen)
992         {
993             ios_base::iostate __err = ios_base::goodbit;
994 #ifndef _LIBCPP_NO_EXCEPTIONS
995             try
996             {
997 #endif  // _LIBCPP_NO_EXCEPTIONS
998                 while (true)
999                 {
1000                     typename traits_type::int_type __i = this->rdbuf()->sgetc();
1001                     if (traits_type::eq_int_type(__i, traits_type::eof()))
1002                     {
1003                        __err |= ios_base::eofbit;
1004                        break;
1005                     }
1006                     char_type __ch = traits_type::to_char_type(__i);
1007                     if (traits_type::eq(__ch, __dlm))
1008                         break;
1009                     if (traits_type::eq_int_type(__sb.sputc(__ch), traits_type::eof()))
1010                         break;
1011                     ++__gc_;
1012                     this->rdbuf()->sbumpc();
1013                 }
1014 #ifndef _LIBCPP_NO_EXCEPTIONS
1015             }
1016             catch (...)
1017             {
1018             }
1019 #endif  // _LIBCPP_NO_EXCEPTIONS
1020             if (__gc_ == 0)
1021                __err |= ios_base::failbit;
1022             this->setstate(__err);
1023         }
1024 #ifndef _LIBCPP_NO_EXCEPTIONS
1025     }
1026     catch (...)
1027     {
1028         this->__set_badbit_and_consider_rethrow();
1029     }
1030 #endif  // _LIBCPP_NO_EXCEPTIONS
1031     return *this;
1032 }
1033
1034 template<class _CharT, class _Traits>
1035 basic_istream<_CharT, _Traits>&
1036 basic_istream<_CharT, _Traits>::getline(char_type* __s, streamsize __n, char_type __dlm)
1037 {
1038     __gc_ = 0;
1039 #ifndef _LIBCPP_NO_EXCEPTIONS
1040     try
1041     {
1042 #endif  // _LIBCPP_NO_EXCEPTIONS
1043         sentry __sen(*this, true);
1044         if (__sen)
1045         {
1046             ios_base::iostate __err = ios_base::goodbit;
1047             while (true)
1048             {
1049                 typename traits_type::int_type __i = this->rdbuf()->sgetc();
1050                 if (traits_type::eq_int_type(__i, traits_type::eof()))
1051                 {
1052                    __err |= ios_base::eofbit;
1053                    break;
1054                 }
1055                 char_type __ch = traits_type::to_char_type(__i);
1056                 if (traits_type::eq(__ch, __dlm))
1057                 {
1058                     this->rdbuf()->sbumpc();
1059                     ++__gc_;
1060                     break;
1061                 }
1062                 if (__gc_ >= __n-1)
1063                 {
1064                     __err |= ios_base::failbit;
1065                     break;
1066                 }
1067                 *__s++ = __ch;
1068                 this->rdbuf()->sbumpc();
1069                 ++__gc_;
1070             }
1071             if (__n > 0)
1072                 *__s = char_type();
1073             if (__gc_ == 0)
1074                __err |= ios_base::failbit;
1075             this->setstate(__err);
1076         }
1077 #ifndef _LIBCPP_NO_EXCEPTIONS
1078     }
1079     catch (...)
1080     {
1081         this->__set_badbit_and_consider_rethrow();
1082     }
1083 #endif  // _LIBCPP_NO_EXCEPTIONS
1084     return *this;
1085 }
1086
1087 template<class _CharT, class _Traits>
1088 basic_istream<_CharT, _Traits>&
1089 basic_istream<_CharT, _Traits>::ignore(streamsize __n, int_type __dlm)
1090 {
1091     __gc_ = 0;
1092 #ifndef _LIBCPP_NO_EXCEPTIONS
1093     try
1094     {
1095 #endif  // _LIBCPP_NO_EXCEPTIONS
1096         sentry __sen(*this, true);
1097         if (__sen)
1098         {
1099             ios_base::iostate __err = ios_base::goodbit;
1100             if (__n == numeric_limits<streamsize>::max())
1101             {
1102                 while (true)
1103                 {
1104                     typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1105                     if (traits_type::eq_int_type(__i, traits_type::eof()))
1106                     {
1107                        __err |= ios_base::eofbit;
1108                        break;
1109                     }
1110                     ++__gc_;
1111                     if (traits_type::eq_int_type(__i, __dlm))
1112                         break;
1113                 }
1114             }
1115             else
1116             {
1117                 while (__gc_ < __n)
1118                 {
1119                     typename traits_type::int_type __i = this->rdbuf()->sbumpc();
1120                     if (traits_type::eq_int_type(__i, traits_type::eof()))
1121                     {
1122                        __err |= ios_base::eofbit;
1123                        break;
1124                     }
1125                     ++__gc_;
1126                     if (traits_type::eq_int_type(__i, __dlm))
1127                         break;
1128                 }
1129             }
1130             this->setstate(__err);
1131         }
1132 #ifndef _LIBCPP_NO_EXCEPTIONS
1133     }
1134     catch (...)
1135     {
1136         this->__set_badbit_and_consider_rethrow();
1137     }
1138 #endif  // _LIBCPP_NO_EXCEPTIONS
1139     return *this;
1140 }
1141
1142 template<class _CharT, class _Traits>
1143 typename basic_istream<_CharT, _Traits>::int_type
1144 basic_istream<_CharT, _Traits>::peek()
1145 {
1146     __gc_ = 0;
1147     int_type __r = traits_type::eof();
1148 #ifndef _LIBCPP_NO_EXCEPTIONS
1149     try
1150     {
1151 #endif  // _LIBCPP_NO_EXCEPTIONS
1152         sentry __sen(*this, true);
1153         if (__sen)
1154         {
1155             __r = this->rdbuf()->sgetc();
1156             if (traits_type::eq_int_type(__r, traits_type::eof()))
1157                 this->setstate(ios_base::eofbit);
1158         }
1159 #ifndef _LIBCPP_NO_EXCEPTIONS
1160     }
1161     catch (...)
1162     {
1163         this->__set_badbit_and_consider_rethrow();
1164     }
1165 #endif  // _LIBCPP_NO_EXCEPTIONS
1166     return __r;
1167 }
1168
1169 template<class _CharT, class _Traits>
1170 basic_istream<_CharT, _Traits>&
1171 basic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n)
1172 {
1173     __gc_ = 0;
1174 #ifndef _LIBCPP_NO_EXCEPTIONS
1175     try
1176     {
1177 #endif  // _LIBCPP_NO_EXCEPTIONS
1178         sentry __sen(*this, true);
1179         if (__sen)
1180         {
1181             __gc_ = this->rdbuf()->sgetn(__s, __n);
1182             if (__gc_ != __n)
1183                 this->setstate(ios_base::failbit | ios_base::eofbit);
1184         }
1185         else
1186             this->setstate(ios_base::failbit);
1187 #ifndef _LIBCPP_NO_EXCEPTIONS
1188     }
1189     catch (...)
1190     {
1191         this->__set_badbit_and_consider_rethrow();
1192     }
1193 #endif  // _LIBCPP_NO_EXCEPTIONS
1194     return *this;
1195 }
1196
1197 template<class _CharT, class _Traits>
1198 streamsize
1199 basic_istream<_CharT, _Traits>::readsome(char_type* __s, streamsize __n)
1200 {
1201     __gc_ = 0;
1202 #ifndef _LIBCPP_NO_EXCEPTIONS
1203     try
1204     {
1205 #endif  // _LIBCPP_NO_EXCEPTIONS
1206         sentry __sen(*this, true);
1207         if (__sen)
1208         {
1209             streamsize __c = this->rdbuf()->in_avail();
1210             switch (__c)
1211             {
1212             case -1:
1213                 this->setstate(ios_base::eofbit);
1214                 break;
1215             case 0:
1216                 break;
1217             default:
1218                 read(__s, _VSTD::min(__c, __n));
1219                 break;
1220             }
1221         }
1222         else
1223             this->setstate(ios_base::failbit);
1224 #ifndef _LIBCPP_NO_EXCEPTIONS
1225     }
1226     catch (...)
1227     {
1228         this->__set_badbit_and_consider_rethrow();
1229     }
1230 #endif  // _LIBCPP_NO_EXCEPTIONS
1231     return __gc_;
1232 }
1233
1234 template<class _CharT, class _Traits>
1235 basic_istream<_CharT, _Traits>&
1236 basic_istream<_CharT, _Traits>::putback(char_type __c)
1237 {
1238     __gc_ = 0;
1239 #ifndef _LIBCPP_NO_EXCEPTIONS
1240     try
1241     {
1242 #endif  // _LIBCPP_NO_EXCEPTIONS
1243         this->clear(this->rdstate() & ~ios_base::eofbit);
1244         sentry __sen(*this, true);
1245         if (__sen)
1246         {
1247             if (this->rdbuf() == 0 || this->rdbuf()->sputbackc(__c) == traits_type::eof())
1248                 this->setstate(ios_base::badbit);
1249         }
1250         else
1251             this->setstate(ios_base::failbit);
1252 #ifndef _LIBCPP_NO_EXCEPTIONS
1253     }
1254     catch (...)
1255     {
1256         this->__set_badbit_and_consider_rethrow();
1257     }
1258 #endif  // _LIBCPP_NO_EXCEPTIONS
1259     return *this;
1260 }
1261
1262 template<class _CharT, class _Traits>
1263 basic_istream<_CharT, _Traits>&
1264 basic_istream<_CharT, _Traits>::unget()
1265 {
1266     __gc_ = 0;
1267 #ifndef _LIBCPP_NO_EXCEPTIONS
1268     try
1269     {
1270 #endif  // _LIBCPP_NO_EXCEPTIONS
1271         this->clear(this->rdstate() & ~ios_base::eofbit);
1272         sentry __sen(*this, true);
1273         if (__sen)
1274         {
1275             if (this->rdbuf() == 0 || this->rdbuf()->sungetc() == traits_type::eof())
1276                 this->setstate(ios_base::badbit);
1277         }
1278         else
1279             this->setstate(ios_base::failbit);
1280 #ifndef _LIBCPP_NO_EXCEPTIONS
1281     }
1282     catch (...)
1283     {
1284         this->__set_badbit_and_consider_rethrow();
1285     }
1286 #endif  // _LIBCPP_NO_EXCEPTIONS
1287     return *this;
1288 }
1289
1290 template<class _CharT, class _Traits>
1291 int
1292 basic_istream<_CharT, _Traits>::sync()
1293 {
1294     int __r = 0;
1295 #ifndef _LIBCPP_NO_EXCEPTIONS
1296     try
1297     {
1298 #endif  // _LIBCPP_NO_EXCEPTIONS
1299         sentry __sen(*this, true);
1300         if (__sen)
1301         {
1302             if (this->rdbuf() == 0)
1303                 return -1;
1304             if (this->rdbuf()->pubsync() == -1)
1305             {
1306                 this->setstate(ios_base::badbit);
1307                 return -1;
1308             }
1309         }
1310 #ifndef _LIBCPP_NO_EXCEPTIONS
1311     }
1312     catch (...)
1313     {
1314         this->__set_badbit_and_consider_rethrow();
1315     }
1316 #endif  // _LIBCPP_NO_EXCEPTIONS
1317     return __r;
1318 }
1319
1320 template<class _CharT, class _Traits>
1321 typename basic_istream<_CharT, _Traits>::pos_type
1322 basic_istream<_CharT, _Traits>::tellg()
1323 {
1324     pos_type __r(-1);
1325 #ifndef _LIBCPP_NO_EXCEPTIONS
1326     try
1327     {
1328 #endif  // _LIBCPP_NO_EXCEPTIONS
1329         sentry __sen(*this, true);
1330         if (__sen)
1331             __r = this->rdbuf()->pubseekoff(0, ios_base::cur, ios_base::in);
1332 #ifndef _LIBCPP_NO_EXCEPTIONS
1333     }
1334     catch (...)
1335     {
1336         this->__set_badbit_and_consider_rethrow();
1337     }
1338 #endif  // _LIBCPP_NO_EXCEPTIONS
1339     return __r;
1340 }
1341
1342 template<class _CharT, class _Traits>
1343 basic_istream<_CharT, _Traits>&
1344 basic_istream<_CharT, _Traits>::seekg(pos_type __pos)
1345 {
1346 #ifndef _LIBCPP_NO_EXCEPTIONS
1347     try
1348     {
1349 #endif  // _LIBCPP_NO_EXCEPTIONS
1350         this->clear(this->rdstate() & ~ios_base::eofbit);
1351         sentry __sen(*this, true);
1352         if (__sen)
1353         {
1354             if (this->rdbuf()->pubseekpos(__pos, ios_base::in) == pos_type(-1))
1355                 this->setstate(ios_base::failbit);
1356         }
1357 #ifndef _LIBCPP_NO_EXCEPTIONS
1358     }
1359     catch (...)
1360     {
1361         this->__set_badbit_and_consider_rethrow();
1362     }
1363 #endif  // _LIBCPP_NO_EXCEPTIONS
1364     return *this;
1365 }
1366
1367 template<class _CharT, class _Traits>
1368 basic_istream<_CharT, _Traits>&
1369 basic_istream<_CharT, _Traits>::seekg(off_type __off, ios_base::seekdir __dir)
1370 {
1371 #ifndef _LIBCPP_NO_EXCEPTIONS
1372     try
1373     {
1374 #endif  // _LIBCPP_NO_EXCEPTIONS
1375         this->clear(this->rdstate() & ~ios_base::eofbit);
1376         sentry __sen(*this, true);
1377         if (__sen)
1378         {
1379             if (this->rdbuf()->pubseekoff(__off, __dir, ios_base::in) == pos_type(-1))
1380                 this->setstate(ios_base::failbit);
1381         }
1382 #ifndef _LIBCPP_NO_EXCEPTIONS
1383     }
1384     catch (...)
1385     {
1386         this->__set_badbit_and_consider_rethrow();
1387     }
1388 #endif  // _LIBCPP_NO_EXCEPTIONS
1389     return *this;
1390 }
1391
1392 template <class _CharT, class _Traits>
1393 basic_istream<_CharT, _Traits>&
1394 ws(basic_istream<_CharT, _Traits>& __is)
1395 {
1396 #ifndef _LIBCPP_NO_EXCEPTIONS
1397     try
1398     {
1399 #endif  // _LIBCPP_NO_EXCEPTIONS
1400         typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1401         if (__sen)
1402         {
1403             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1404             while (true)
1405             {
1406                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1407                 if (_Traits::eq_int_type(__i, _Traits::eof()))
1408                 {
1409                    __is.setstate(ios_base::eofbit);
1410                    break;
1411                 }
1412                 if (!__ct.is(__ct.space, _Traits::to_char_type(__i)))
1413                     break;
1414                 __is.rdbuf()->sbumpc();
1415             }
1416         }
1417 #ifndef _LIBCPP_NO_EXCEPTIONS
1418     }
1419     catch (...)
1420     {
1421         __is.__set_badbit_and_consider_rethrow();
1422     }
1423 #endif  // _LIBCPP_NO_EXCEPTIONS
1424     return __is;
1425 }
1426
1427 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1428
1429 template <class _CharT, class _Traits, class _Tp>
1430 inline _LIBCPP_INLINE_VISIBILITY
1431 basic_istream<_CharT, _Traits>&
1432 operator>>(basic_istream<_CharT, _Traits>&& __is, _Tp&& __x)
1433 {
1434     __is >> _VSTD::forward<_Tp>(__x);
1435     return __is;
1436 }
1437
1438 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1439
1440 template <class _CharT, class _Traits>
1441 class _LIBCPP_TEMPLATE_VIS basic_iostream
1442     : public basic_istream<_CharT, _Traits>,
1443       public basic_ostream<_CharT, _Traits>
1444 {
1445 public:
1446     // types:
1447     typedef _CharT                         char_type;
1448     typedef _Traits                        traits_type;
1449     typedef typename traits_type::int_type int_type;
1450     typedef typename traits_type::pos_type pos_type;
1451     typedef typename traits_type::off_type off_type;
1452
1453     // constructor/destructor
1454     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
1455     explicit basic_iostream(basic_streambuf<char_type, traits_type>* __sb)
1456       : basic_istream<_CharT, _Traits>(__sb)
1457     {}
1458
1459     virtual ~basic_iostream();
1460 protected:
1461 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1462     inline _LIBCPP_INLINE_VISIBILITY
1463     basic_iostream(basic_iostream&& __rhs);
1464 #endif
1465
1466     // assign/swap
1467 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1468     inline _LIBCPP_INLINE_VISIBILITY
1469     basic_iostream& operator=(basic_iostream&& __rhs);
1470 #endif
1471     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
1472     void swap(basic_iostream& __rhs)
1473     { basic_istream<char_type, traits_type>::swap(__rhs); }
1474 public:
1475 };
1476
1477 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1478
1479 template <class _CharT, class _Traits>
1480 basic_iostream<_CharT, _Traits>::basic_iostream(basic_iostream&& __rhs)
1481     : basic_istream<_CharT, _Traits>(_VSTD::move(__rhs))
1482 {
1483 }
1484
1485 template <class _CharT, class _Traits>
1486 basic_iostream<_CharT, _Traits>&
1487 basic_iostream<_CharT, _Traits>::operator=(basic_iostream&& __rhs)
1488 {
1489     swap(__rhs);
1490     return *this;
1491 }
1492
1493 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1494
1495 template <class _CharT, class _Traits>
1496 basic_iostream<_CharT, _Traits>::~basic_iostream()
1497 {
1498 }
1499
1500 template<class _CharT, class _Traits, class _Allocator>
1501 basic_istream<_CharT, _Traits>&
1502 operator>>(basic_istream<_CharT, _Traits>& __is,
1503            basic_string<_CharT, _Traits, _Allocator>& __str)
1504 {
1505 #ifndef _LIBCPP_NO_EXCEPTIONS
1506     try
1507     {
1508 #endif  // _LIBCPP_NO_EXCEPTIONS
1509         typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1510         if (__sen)
1511         {
1512             __str.clear();
1513             streamsize __n = __is.width();
1514             if (__n <= 0)
1515                 __n = __str.max_size();
1516             if (__n <= 0)
1517                 __n = numeric_limits<streamsize>::max();
1518             streamsize __c = 0;
1519             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1520             ios_base::iostate __err = ios_base::goodbit;
1521             while (__c < __n)
1522             {
1523                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1524                 if (_Traits::eq_int_type(__i, _Traits::eof()))
1525                 {
1526                    __err |= ios_base::eofbit;
1527                    break;
1528                 }
1529                 _CharT __ch = _Traits::to_char_type(__i);
1530                 if (__ct.is(__ct.space, __ch))
1531                     break;
1532                 __str.push_back(__ch);
1533                 ++__c;
1534                  __is.rdbuf()->sbumpc();
1535             }
1536             __is.width(0);
1537             if (__c == 0)
1538                __err |= ios_base::failbit;
1539             __is.setstate(__err);
1540         }
1541         else
1542             __is.setstate(ios_base::failbit);
1543 #ifndef _LIBCPP_NO_EXCEPTIONS
1544     }
1545     catch (...)
1546     {
1547         __is.__set_badbit_and_consider_rethrow();
1548     }
1549 #endif  // _LIBCPP_NO_EXCEPTIONS
1550     return __is;
1551 }
1552
1553 template<class _CharT, class _Traits, class _Allocator>
1554 basic_istream<_CharT, _Traits>&
1555 getline(basic_istream<_CharT, _Traits>& __is,
1556         basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1557 {
1558 #ifndef _LIBCPP_NO_EXCEPTIONS
1559     try
1560     {
1561 #endif  // _LIBCPP_NO_EXCEPTIONS
1562         typename basic_istream<_CharT, _Traits>::sentry __sen(__is, true);
1563         if (__sen)
1564         {
1565             __str.clear();
1566             ios_base::iostate __err = ios_base::goodbit;
1567             streamsize __extr = 0;
1568             while (true)
1569             {
1570                 typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
1571                 if (_Traits::eq_int_type(__i, _Traits::eof()))
1572                 {
1573                    __err |= ios_base::eofbit;
1574                    break;
1575                 }
1576                 ++__extr;
1577                 _CharT __ch = _Traits::to_char_type(__i);
1578                 if (_Traits::eq(__ch, __dlm))
1579                     break;
1580                 __str.push_back(__ch);
1581                 if (__str.size() == __str.max_size())
1582                 {
1583                     __err |= ios_base::failbit;
1584                     break;
1585                 }
1586             }
1587             if (__extr == 0)
1588                __err |= ios_base::failbit;
1589             __is.setstate(__err);
1590         }
1591 #ifndef _LIBCPP_NO_EXCEPTIONS
1592     }
1593     catch (...)
1594     {
1595         __is.__set_badbit_and_consider_rethrow();
1596     }
1597 #endif  // _LIBCPP_NO_EXCEPTIONS
1598     return __is;
1599 }
1600
1601 template<class _CharT, class _Traits, class _Allocator>
1602 inline _LIBCPP_INLINE_VISIBILITY
1603 basic_istream<_CharT, _Traits>&
1604 getline(basic_istream<_CharT, _Traits>& __is,
1605         basic_string<_CharT, _Traits, _Allocator>& __str)
1606 {
1607     return getline(__is, __str, __is.widen('\n'));
1608 }
1609
1610 #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
1611
1612 template<class _CharT, class _Traits, class _Allocator>
1613 inline _LIBCPP_INLINE_VISIBILITY
1614 basic_istream<_CharT, _Traits>&
1615 getline(basic_istream<_CharT, _Traits>&& __is,
1616         basic_string<_CharT, _Traits, _Allocator>& __str, _CharT __dlm)
1617 {
1618     return getline(__is, __str, __dlm);
1619 }
1620
1621 template<class _CharT, class _Traits, class _Allocator>
1622 inline _LIBCPP_INLINE_VISIBILITY
1623 basic_istream<_CharT, _Traits>&
1624 getline(basic_istream<_CharT, _Traits>&& __is,
1625         basic_string<_CharT, _Traits, _Allocator>& __str)
1626 {
1627     return getline(__is, __str, __is.widen('\n'));
1628 }
1629
1630 #endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
1631
1632 template <class _CharT, class _Traits, size_t _Size>
1633 basic_istream<_CharT, _Traits>&
1634 operator>>(basic_istream<_CharT, _Traits>& __is, bitset<_Size>& __x)
1635 {
1636 #ifndef _LIBCPP_NO_EXCEPTIONS
1637     try
1638     {
1639 #endif  // _LIBCPP_NO_EXCEPTIONS
1640         typename basic_istream<_CharT, _Traits>::sentry __sen(__is);
1641         if (__sen)
1642         {
1643             basic_string<_CharT, _Traits> __str;
1644             const ctype<_CharT>& __ct = use_facet<ctype<_CharT> >(__is.getloc());
1645             size_t __c = 0;
1646             ios_base::iostate __err = ios_base::goodbit;
1647             _CharT __zero = __ct.widen('0');
1648             _CharT __one = __ct.widen('1');
1649             while (__c < _Size)
1650             {
1651                 typename _Traits::int_type __i = __is.rdbuf()->sgetc();
1652                 if (_Traits::eq_int_type(__i, _Traits::eof()))
1653                 {
1654                    __err |= ios_base::eofbit;
1655                    break;
1656                 }
1657                 _CharT __ch = _Traits::to_char_type(__i);
1658                 if (!_Traits::eq(__ch, __zero) && !_Traits::eq(__ch, __one))
1659                     break;
1660                 __str.push_back(__ch);
1661                 ++__c;
1662                  __is.rdbuf()->sbumpc();
1663             }
1664             __x = bitset<_Size>(__str);
1665             if (__c == 0)
1666                __err |= ios_base::failbit;
1667             __is.setstate(__err);
1668         }
1669         else
1670             __is.setstate(ios_base::failbit);
1671 #ifndef _LIBCPP_NO_EXCEPTIONS
1672     }
1673     catch (...)
1674     {
1675         __is.__set_badbit_and_consider_rethrow();
1676     }
1677 #endif  // _LIBCPP_NO_EXCEPTIONS
1678     return __is;
1679 }
1680
1681 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<char>)
1682 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_istream<wchar_t>)
1683 _LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_EXTERN_TEMPLATE_TYPE_VIS basic_iostream<char>)
1684
1685 _LIBCPP_END_NAMESPACE_STD
1686
1687 #endif  // _LIBCPP_ISTREAM