re PR libstdc++/24645 (Commonize arithmetic inserters/extractors bodies)
authorPaolo Carlini <pcarlini@suse.de>
Mon, 2 Jan 2006 09:57:49 +0000 (09:57 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 2 Jan 2006 09:57:49 +0000 (09:57 +0000)
2006-01-02  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/24645
* include/std/std_istream.h (basic_istream<>::_M_extract): New.
(operator>>(bool&), operator>>(short&), operator>>(unsigned short&),
operator>>(int&), operator>>(unsigned int&), operator>>(long&),
operator>>(unsigned long&), operator>>(long long&), operator>>
(unsigned long long&), operator>>(float&), operator>>(double&),
operator>>(long double&), operator>>(void*&)): Use it.
* include/bits/istream.tcc (basic_istream<>::_M_extract): Define.
* include/std/std_ostream.h (basic_ostream<>::_M_insert): New.
(operator<<(long), operator<<(unsigned long), operator<<(bool),
operator<<(short), operator<<(unsigned short), operator<<(int),
operator<<(unsigned int), operator<<(long long), operator<<
(unsigned long long), operator<<(double), operator<<(float),
operator<<(long double), operator<<(const void*): Use it.
* include/bits/ostream.tcc (basic_ostream<>::_M_insert): Define.
* src/istream-inst.cc: Add _M_insert instantiations.
* src/ostream-inst.cc: Add _M_extract instantiations.
* config/abi/pre/gnu.ver: Export the new symbols @GLIBCXX_3.4.7;
detail existing @GLIBCXX_3.4 exports of basic_ostream, num_put,
money_put, etc., symbols to avoid exporting _M_insert symbols
@GLIBCXX_3.4.

From-SVN: r109236

libstdc++-v3/ChangeLog
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/include/bits/istream.tcc
libstdc++-v3/include/bits/ostream.tcc
libstdc++-v3/include/std/std_istream.h
libstdc++-v3/include/std/std_ostream.h
libstdc++-v3/src/istream-inst.cc
libstdc++-v3/src/ostream-inst.cc

index ef546e6..a673370 100644 (file)
@@ -1,3 +1,27 @@
+2006-01-02  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/24645
+       * include/std/std_istream.h (basic_istream<>::_M_extract): New.
+       (operator>>(bool&), operator>>(short&), operator>>(unsigned short&),
+       operator>>(int&), operator>>(unsigned int&), operator>>(long&),
+       operator>>(unsigned long&), operator>>(long long&), operator>>
+       (unsigned long long&), operator>>(float&), operator>>(double&),
+       operator>>(long double&), operator>>(void*&)): Use it.
+       * include/bits/istream.tcc (basic_istream<>::_M_extract): Define.
+       * include/std/std_ostream.h (basic_ostream<>::_M_insert): New.
+       (operator<<(long), operator<<(unsigned long), operator<<(bool),
+       operator<<(short), operator<<(unsigned short), operator<<(int),
+       operator<<(unsigned int), operator<<(long long), operator<<
+       (unsigned long long), operator<<(double), operator<<(float),
+       operator<<(long double), operator<<(const void*): Use it.
+       * include/bits/ostream.tcc (basic_ostream<>::_M_insert): Define.
+       * src/istream-inst.cc: Add _M_insert instantiations.
+       * src/ostream-inst.cc: Add _M_extract instantiations.
+       * config/abi/pre/gnu.ver: Export the new symbols @GLIBCXX_3.4.7;
+       detail existing @GLIBCXX_3.4 exports of basic_ostream, num_put,
+       money_put, etc., symbols to avoid exporting _M_insert symbols
+       @GLIBCXX_3.4.
+
 2005-12-28  Paolo Carlini  <pcarlini@suse.de>
 
        * docs/html/ext/lwg-active.html, lwg-defects.html: Import Revision 40.
index c76bdf9..831951d 100644 (file)
@@ -42,7 +42,10 @@ GLIBCXX_3.4 {
       std::basic_[j-n]*;
       std::basic_o[a-e]*;
 #     std::basic_ofstream;
-      std::basic_o[g-z]*;
+#     std::basic_o[g-z]*;
+      std::basic_o[g-r]*;
+      std::basic_ostr[a-d]*;
+      std::basic_ostr[f-z]*;
       std::basic_[p-r]*;
       std::basic_streambuf*;
 #     std::basic_string
@@ -86,7 +89,12 @@ GLIBCXX_3.4 {
       std::locale::_[J-Ra-z]*;
       std::locale::_S_normalize_category*;
       std::locale::_[T-Za-z]*;
-      std::[A-Zm-r]*;
+#     std::[A-Zm-r]*;
+      std::[A-Zm-n]*;
+      std::[p-r]*;
+      std::ostrstream*;
+      std::out_of_range*;
+      std::overflow_error*;
       std::set_new_handler*;
       std::set_terminate*;
       std::set_unexpected*;
@@ -257,7 +265,7 @@ GLIBCXX_3.4 {
     _ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreE[il][ijlm];
     _ZNSt13basic_istreamIwSt11char_traitsIwEErsE*;
 
-    # std::istream operators and inserters
+    # std::istream operators and extractors
     _ZSt7getlineI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_istream*;
     _ZSt2wsI[cw]St11char_traitsI[cw]EE*;
     _ZStrsI[cw]St11char_traitsI[cw]EERSt13basic_istream*;
@@ -267,6 +275,37 @@ GLIBCXX_3.4 {
     _ZStrsIe[cw]St11char_traitsI[cw]EERSt13basic_istream*;
     _ZStrsIf[cw]St11char_traitsI[cw]EERSt13basic_istream*;
 
+    # std::basic_ostream<char>
+    _ZNSoC*;
+    _ZNSoD*;
+    _ZNKSo6sentrycvbEv;
+    _ZNSo8_M_write*;
+    _ZNSo[0-9][a-z]*;
+    _ZNSolsE*;
+
+    # std::basic_ostream<wchar_t>
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEEC*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEED*;
+    _ZNKSt13basic_ostreamIwSt11char_traitsIwEE[0-9][a-z]*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE3putEw;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5flushEv;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5seekpE*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5tellpEv;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE5writeEPKw*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE6sentry*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE8_M_write*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEElsE*;
+
+    # std::ostream operators and inserters
+    _ZSt4end[ls]I[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZSt5flushI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZStlsI[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZStlsI[cw]St11char_traitsI[cw]ESaI[cw]EERSt13basic_ostream*;
+    _ZStlsISt11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZStlsId[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZStlsIe[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+    _ZStlsIf[cw]St11char_traitsI[cw]EERSt13basic_ostream*;
+
     # std::locale destructors
     _ZNSt6localeD*;
        
@@ -287,9 +326,15 @@ GLIBCXX_3.4 {
     # std::num_get
     _ZNKSt7num_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
+    # std::num_put
+    _ZNKSt7num_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+
     # std::money_get
     _ZNKSt9money_getI[cw]St19istreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
 
+    # std::money_put
+    _ZNKSt9money_putI[cw]St19ostreambuf_iteratorI[cw]St11char_traitsI[cw]EEE*;
+
     # std::_Rb_tree
     _ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base;
     _ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base;
@@ -328,25 +373,25 @@ GLIBCXX_3.4 {
     _ZN9__gnu_cxx18__exchange_and_add*;
 
     # __gnu_debug
-_ZN10__gnu_norm15_List_node_base4hookEPS0_;
-_ZN10__gnu_norm15_List_node_base4swapERS0_S1_;
-_ZN10__gnu_norm15_List_node_base6unhookEv;
-_ZN10__gnu_norm15_List_node_base7reverseEv;
-_ZN10__gnu_norm15_List_node_base8transferEPS0_S1_;
-_ZN11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
-_ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv;
-_ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv;
-_ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
-_ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv;
-_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv;
-_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv;
-_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_;
-_ZNK11__gnu_debug16_Error_formatter8_M_errorEv;
-_ZNK11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE;
-_ZNK11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc;
-_ZNK11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_;
-_ZNK11__gnu_debug16_Error_formatter13_M_print_wordEPKc;
-_ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc;
+    _ZN10__gnu_norm15_List_node_base4hookEPS0_;
+    _ZN10__gnu_norm15_List_node_base4swapERS0_S1_;
+    _ZN10__gnu_norm15_List_node_base6unhookEv;
+    _ZN10__gnu_norm15_List_node_base7reverseEv;
+    _ZN10__gnu_norm15_List_node_base8transferEPS0_S1_;
+    _ZN11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
+    _ZN11__gnu_debug19_Safe_iterator_base9_M_detachEv;
+    _ZNK11__gnu_debug19_Safe_iterator_base11_M_singularEv;
+    _ZNK11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
+    _ZN11__gnu_debug19_Safe_sequence_base13_M_detach_allEv;
+    _ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv;
+    _ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv;
+    _ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_;
+    _ZNK11__gnu_debug16_Error_formatter8_M_errorEv;
+    _ZNK11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE;
+    _ZNK11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc;
+    _ZNK11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_;
+    _ZNK11__gnu_debug16_Error_formatter13_M_print_wordEPKc;
+    _ZNK11__gnu_debug16_Error_formatter15_M_print_stringEPKc;
 
     # operator new(size_t)
     _Znw[jm];
@@ -596,25 +641,30 @@ GLIBCXX_3.4.7 {
 
     _ZNSt6locale5_Impl16_M_install_cacheEPKNS_5facetE[jm];
 
-_ZNSt10__gnu_norm15_List_node_base4hookEPS0_;
-_ZNSt10__gnu_norm15_List_node_base4swapERS0_S1_;
-_ZNSt10__gnu_norm15_List_node_base6unhookEv;
-_ZNSt10__gnu_norm15_List_node_base7reverseEv;
-_ZNSt10__gnu_norm15_List_node_base8transferEPS0_S1_;
-_ZNKSt11__gnu_debug16_Error_formatter8_M_errorEv;
-_ZNKSt11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE;
-_ZNKSt11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc;
-_ZNKSt11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_;
-_ZNKSt11__gnu_debug16_Error_formatter13_M_print_wordEPKc;
-_ZNKSt11__gnu_debug16_Error_formatter15_M_print_stringEPKc;
-_ZNKSt11__gnu_debug19_Safe_iterator_base11_M_singularEv;
-_ZNKSt11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
-_ZNSt11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
-_ZNSt11__gnu_debug19_Safe_iterator_base9_M_detachEv;
-_ZNSt11__gnu_debug19_Safe_sequence_base13_M_detach_allEv;
-_ZNSt11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv;
-_ZNSt11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv;
-_ZNSt11__gnu_debug19_Safe_sequence_base7_M_swapERS0_;
+    _ZNSt10__gnu_norm15_List_node_base4hookEPS0_;
+    _ZNSt10__gnu_norm15_List_node_base4swapERS0_S1_;
+    _ZNSt10__gnu_norm15_List_node_base6unhookEv;
+    _ZNSt10__gnu_norm15_List_node_base7reverseEv;
+    _ZNSt10__gnu_norm15_List_node_base8transferEPS0_S1_;
+    _ZNKSt11__gnu_debug16_Error_formatter8_M_errorEv;
+    _ZNKSt11__gnu_debug16_Error_formatter10_M_messageENS_13_Debug_msg_idE;
+    _ZNKSt11__gnu_debug16_Error_formatter10_Parameter14_M_print_fieldEPKS0_PKc;
+    _ZNKSt11__gnu_debug16_Error_formatter10_Parameter20_M_print_descriptionEPKS0_;
+    _ZNKSt11__gnu_debug16_Error_formatter13_M_print_wordEPKc;
+    _ZNKSt11__gnu_debug16_Error_formatter15_M_print_stringEPKc;
+    _ZNKSt11__gnu_debug19_Safe_iterator_base11_M_singularEv;
+    _ZNKSt11__gnu_debug19_Safe_iterator_base14_M_can_compareERKS0_;
+    _ZNSt11__gnu_debug19_Safe_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb;
+    _ZNSt11__gnu_debug19_Safe_iterator_base9_M_detachEv;
+    _ZNSt11__gnu_debug19_Safe_sequence_base13_M_detach_allEv;
+    _ZNSt11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv;
+    _ZNSt11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv;
+    _ZNSt11__gnu_debug19_Safe_sequence_base7_M_swapERS0_;
+
+    _ZNSo9_M_insertI*;
+    _ZNSt13basic_ostreamIwSt11char_traitsIwEE9_M_insertI*;
+    _ZNSi10_M_extractI*;
+    _ZNSt13basic_istreamIwSt11char_traitsIwEE10_M_extractI*;
 
 } GLIBCXX_3.4.6;
 
index 541e75a..184c2bd 100644 (file)
@@ -110,310 +110,27 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     }
 
   template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(bool& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(short& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             long __l;
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __l);
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 118. basic_istream uses nonexistent num_get member functions.
-             if (!(__err & ios_base::failbit)
-                 && (numeric_limits<short>::min() <= __l
-                     && __l <= numeric_limits<short>::max()))
-               __n = __l;
-             else
-                __err |= ios_base::failbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(unsigned short& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(int& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             long __l;
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __l);
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 118. basic_istream uses nonexistent num_get member functions.
-             if (!(__err & ios_base::failbit)
-                 && (numeric_limits<int>::min() <= __l
-                     && __l <= numeric_limits<int>::max()))
-               __n = __l;
-             else
-                __err |= ios_base::failbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(unsigned int& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(long& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(unsigned long& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-#ifdef _GLIBCXX_USE_LONG_LONG
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(long long& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(unsigned long long& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-#endif
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(float& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(double& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(long double& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_istream<_CharT, _Traits>&
-    basic_istream<_CharT, _Traits>::
-    operator>>(void*& __n)
-    {
-      sentry __cerb(*this, false);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_get_type& __ng = __check_facet(this->_M_num_get);
-             __ng.get(*this, 0, *this, __err, __n);
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
+    template<typename _ValueT>
+      basic_istream<_CharT, _Traits>&
+      basic_istream<_CharT, _Traits>::
+      _M_extract(_ValueT& __v)
+      {
+       sentry __cerb(*this, false);
+       if (__cerb)
+         {
+           ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+           try
+             {
+               const __num_get_type& __ng = __check_facet(this->_M_num_get);
+               __ng.get(*this, 0, *this, __err, __v);
+             }
+           catch(...)
+             { this->_M_setstate(ios_base::badbit); }
+           if (__err)
+             this->setstate(__err);
+         }
+       return *this;
+      }
 
   template<typename _CharT, typename _Traits>
     basic_istream<_CharT, _Traits>&
index 1642583..7b80495 100644 (file)
@@ -97,333 +97,29 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     }
 
   template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(bool __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(short __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 117. basic_ostream uses nonexistent num_put member functions.
-             long __l;
-             const ios_base::fmtflags __fmt = (this->flags()
-                                               & ios_base::basefield);
-             if (__fmt == ios_base::oct || __fmt == ios_base::hex)
-               __l = static_cast<long>(static_cast<unsigned short>(__n));
-             else
-               __l = static_cast<long>(__n);
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __l).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(unsigned short __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 117. basic_ostream uses nonexistent num_put member functions.
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(),
-                          static_cast<unsigned long>(__n)).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(int __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 117. basic_ostream uses nonexistent num_put member functions.
-             long __l;
-             const ios_base::fmtflags __fmt = (this->flags()
-                                               & ios_base::basefield);
-             if (__fmt == ios_base::oct || __fmt == ios_base::hex)
-               __l = static_cast<long>(static_cast<unsigned int>(__n));
-             else
-               __l = static_cast<long>(__n);
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __l).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(unsigned int __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 117. basic_ostream uses nonexistent num_put member functions.
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(),
-                          static_cast<unsigned long>(__n)).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(long __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(unsigned long __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-#ifdef _GLIBCXX_USE_LONG_LONG
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(long long __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(unsigned long long __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-#endif
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(float __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             // _GLIBCXX_RESOLVE_LIB_DEFECTS
-             // 117. basic_ostream uses nonexistent num_put member functions.
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(),
-                          static_cast<double>(__n)).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(double __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(long double __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
-  template<typename _CharT, typename _Traits>
-    basic_ostream<_CharT, _Traits>&
-    basic_ostream<_CharT, _Traits>::
-    operator<<(const void* __n)
-    {
-      sentry __cerb(*this);
-      if (__cerb)
-       {
-         ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
-         try
-           {
-             const __num_put_type& __np = __check_facet(this->_M_num_put);
-             if (__np.put(*this, *this, this->fill(), __n).failed())
-               __err |= ios_base::badbit;
-           }
-         catch(...)
-           { this->_M_setstate(ios_base::badbit); }
-         if (__err)
-           this->setstate(__err);
-       }
-      return *this;
-    }
-
+    template<typename _ValueT>
+      basic_ostream<_CharT, _Traits>&
+      basic_ostream<_CharT, _Traits>::
+      _M_insert(_ValueT __v)
+      {
+       sentry __cerb(*this);
+       if (__cerb)
+         {
+           ios_base::iostate __err = ios_base::iostate(ios_base::goodbit);
+           try
+             {
+               const __num_put_type& __np = __check_facet(this->_M_num_put);
+               if (__np.put(*this, *this, this->fill(), __v).failed())
+                 __err |= ios_base::badbit;
+             }
+           catch(...)
+             { this->_M_setstate(ios_base::badbit); }
+           if (__err)
+             this->setstate(__err);
+         }
+       return *this;
+      }
+  
   template<typename _CharT, typename _Traits>
     basic_ostream<_CharT, _Traits>&
     basic_ostream<_CharT, _Traits>::
index 2c5c572..659d3e2 100644 (file)
@@ -166,45 +166,86 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
        *  @c num_get facet) to parse the input data.
       */
       __istream_type& 
-      operator>>(bool& __n);
+      operator>>(bool& __n)
+      { return _M_extract(__n); }
       
       __istream_type& 
-      operator>>(short& __n);
+      operator>>(short& __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 118. basic_istream uses nonexistent num_get member functions.
+       long __l;
+       _M_extract(__l);
+       if (!this->fail())
+         {
+           if (numeric_limits<short>::min() <= __l
+               && __l <= numeric_limits<short>::max())
+             __n = __l;
+           else
+             this->setstate(ios_base::failbit);
+         }
+       return *this;
+      }
       
       __istream_type& 
-      operator>>(unsigned short& __n);
+      operator>>(unsigned short& __n)
+      { return _M_extract(__n); }
 
       __istream_type& 
-      operator>>(int& __n);
-      
+      operator>>(int& __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 118. basic_istream uses nonexistent num_get member functions.
+       long __l;
+       _M_extract(__l);
+       if (!this->fail())
+         {
+           if (numeric_limits<int>::min() <= __l
+               && __l <= numeric_limits<int>::max())
+             __n = __l;
+           else
+             this->setstate(ios_base::failbit);
+         }
+       return *this;
+      }
+     
       __istream_type& 
-      operator>>(unsigned int& __n);
+      operator>>(unsigned int& __n)
+      { return _M_extract(__n); }
 
       __istream_type& 
-      operator>>(long& __n);
+      operator>>(long& __n)
+      { return _M_extract(__n); }
       
       __istream_type& 
-      operator>>(unsigned long& __n);
+      operator>>(unsigned long& __n)
+      { return _M_extract(__n); }
 
 #ifdef _GLIBCXX_USE_LONG_LONG
       __istream_type& 
-      operator>>(long long& __n);
+      operator>>(long long& __n)
+      { return _M_extract(__n); }
 
       __istream_type& 
-      operator>>(unsigned long long& __n);
+      operator>>(unsigned long long& __n)
+      { return _M_extract(__n); }
 #endif
 
       __istream_type& 
-      operator>>(float& __f);
+      operator>>(float& __f)
+      { return _M_extract(__f); }
 
       __istream_type& 
-      operator>>(double& __f);
+      operator>>(double& __f)
+      { return _M_extract(__f); }
 
       __istream_type& 
-      operator>>(long double& __f);
+      operator>>(long double& __f)
+      { return _M_extract(__f); }
 
       __istream_type& 
-      operator>>(void*& __p);
+      operator>>(void*& __p)
+      { return _M_extract(__p); }
 
       /**
        *  @brief  Extracting into another streambuf.
@@ -572,6 +613,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     protected:
       explicit 
       basic_istream(): _M_gcount(streamsize(0)) { }
+
+      template<typename _ValueT>
+        __istream_type&
+        _M_extract(_ValueT& __v);
     };
 
   // Explicit specialization declarations, defined in src/istream.cc.
index 8d42282..8dc398e 100644 (file)
@@ -164,45 +164,86 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
        *  @c num_get facet) to perform numeric formatting.
       */
       __ostream_type& 
-      operator<<(long __n);
+      operator<<(long __n)
+      { return _M_insert(__n); }
       
       __ostream_type& 
-      operator<<(unsigned long __n);
+      operator<<(unsigned long __n)
+      { return _M_insert(__n); }       
 
       __ostream_type& 
-      operator<<(bool __n);
+      operator<<(bool __n)
+      { return _M_insert(__n); }
 
       __ostream_type& 
-      operator<<(short __n);
+      operator<<(short __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 117. basic_ostream uses nonexistent num_put member functions.
+       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+         return _M_insert(static_cast<long>(static_cast<unsigned short>(__n)));
+       else
+         return _M_insert(static_cast<long>(__n));
+      }
 
       __ostream_type& 
-      operator<<(unsigned short __n);
+      operator<<(unsigned short __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 117. basic_ostream uses nonexistent num_put member functions.
+       return _M_insert(static_cast<unsigned long>(__n));
+      }
 
       __ostream_type& 
-      operator<<(int __n);
+      operator<<(int __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 117. basic_ostream uses nonexistent num_put member functions.
+       const ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
+       if (__fmt == ios_base::oct || __fmt == ios_base::hex)
+         return _M_insert(static_cast<long>(static_cast<unsigned int>(__n)));
+       else
+         return _M_insert(static_cast<long>(__n));
+      }
 
       __ostream_type& 
-      operator<<(unsigned int __n);
+      operator<<(unsigned int __n)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 117. basic_ostream uses nonexistent num_put member functions.
+       return _M_insert(static_cast<unsigned long>(__n));
+      }
 
 #ifdef _GLIBCXX_USE_LONG_LONG
       __ostream_type& 
-      operator<<(long long __n);
+      operator<<(long long __n)
+      { return _M_insert(__n); }
 
       __ostream_type& 
-      operator<<(unsigned long long __n);
+      operator<<(unsigned long long __n)
+      { return _M_insert(__n); }       
 #endif
 
       __ostream_type& 
-      operator<<(double __f);
+      operator<<(double __f)
+      { return _M_insert(__f); }
 
       __ostream_type& 
-      operator<<(float __f);
+      operator<<(float __f)
+      {
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+       // 117. basic_ostream uses nonexistent num_put member functions.
+       return _M_insert(static_cast<double>(__f));
+      }
 
       __ostream_type& 
-      operator<<(long double __f);
+      operator<<(long double __f)
+      { return _M_insert(__f); }
 
       __ostream_type& 
-      operator<<(const void* __p);
+      operator<<(const void* __p)
+      { return _M_insert(__p); }
 
       /**
        *  @brief  Extracting from another streambuf.
@@ -339,6 +380,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
     protected:
       explicit 
       basic_ostream() { }
+
+      template<typename _ValueT>
+        __ostream_type&
+        _M_insert(_ValueT __v);
     };
 
   /**
index d71314d..2e5c7d3 100644 (file)
@@ -53,6 +53,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template istream& operator>>(istream&, _Setprecision);
   template istream& operator>>(istream&, _Setw);
 
+  template istream& istream::_M_extract(unsigned short&);
+  template istream& istream::_M_extract(unsigned int&);  
+  template istream& istream::_M_extract(long&);
+  template istream& istream::_M_extract(unsigned long&);
+  template istream& istream::_M_extract(bool&);
+#ifdef _GLIBCXX_USE_LONG_LONG
+  template istream& istream::_M_extract(long long&);
+  template istream& istream::_M_extract(unsigned long long&);
+#endif
+  template istream& istream::_M_extract(float&);
+  template istream& istream::_M_extract(double&);
+  template istream& istream::_M_extract(long double&);
+  template istream& istream::_M_extract(void*&);
+
 #ifdef _GLIBCXX_USE_WCHAR_T
   template class basic_istream<wchar_t>;
   template wistream& ws(wistream&);
@@ -65,6 +79,20 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template wistream& operator>>(wistream&, _Setbase);
   template wistream& operator>>(wistream&, _Setprecision);
   template wistream& operator>>(wistream&, _Setw);
+
+  template wistream& wistream::_M_extract(unsigned short&);
+  template wistream& wistream::_M_extract(unsigned int&);  
+  template wistream& wistream::_M_extract(long&);
+  template wistream& wistream::_M_extract(unsigned long&);
+  template wistream& wistream::_M_extract(bool&);
+#ifdef _GLIBCXX_USE_LONG_LONG
+  template wistream& wistream::_M_extract(long long&);
+  template wistream& wistream::_M_extract(unsigned long long&);
+#endif
+  template wistream& wistream::_M_extract(float&);
+  template wistream& wistream::_M_extract(double&);
+  template wistream& wistream::_M_extract(long double&);
+  template wistream& wistream::_M_extract(void*&);
 #endif
 
 _GLIBCXX_END_NAMESPACE
index 4568dca..70df37b 100644 (file)
@@ -1,6 +1,6 @@
 // Explicit instantiation file.
 
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
 // Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
@@ -56,6 +56,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template ostream& operator<<(ostream&, _Setprecision);
   template ostream& operator<<(ostream&, _Setw);
 
+  template ostream& ostream::_M_insert(long);
+  template ostream& ostream::_M_insert(unsigned long);
+  template ostream& ostream::_M_insert(bool);
+#ifdef _GLIBCXX_USE_LONG_LONG
+  template ostream& ostream::_M_insert(long long);
+  template ostream& ostream::_M_insert(unsigned long long);
+#endif
+  template ostream& ostream::_M_insert(double);
+  template ostream& ostream::_M_insert(long double);
+  template ostream& ostream::_M_insert(const void*);
+
 #ifdef _GLIBCXX_USE_WCHAR_T
   template class basic_ostream<wchar_t>;
   template wostream& endl(wostream&);
@@ -72,6 +83,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
   template wostream& operator<<(wostream&, _Setbase);
   template wostream& operator<<(wostream&, _Setprecision);
   template wostream& operator<<(wostream&, _Setw);
+
+  template wostream& wostream::_M_insert(long);
+  template wostream& wostream::_M_insert(unsigned long);
+  template wostream& wostream::_M_insert(bool);
+#ifdef _GLIBCXX_USE_LONG_LONG
+  template wostream& wostream::_M_insert(long long);
+  template wostream& wostream::_M_insert(unsigned long long);
+#endif
+  template wostream& wostream::_M_insert(double);
+  template wostream& wostream::_M_insert(long double);
+  template wostream& wostream::_M_insert(const void*);
 #endif
 
 _GLIBCXX_END_NAMESPACE