+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.
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
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*;
_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*;
_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*;
# 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;
_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];
_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;
}
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>&
}
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>::
* @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.
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.
* @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.
protected:
explicit
basic_ostream() { }
+
+ template<typename _ValueT>
+ __ostream_type&
+ _M_insert(_ValueT __v);
};
/**
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&);
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
// 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
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&);
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