re PR libstdc++/24645 (Commonize arithmetic inserters/extractors bodies)
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
This commit is contained in:
parent
5f0926cd78
commit
49d5c016da
8 changed files with 327 additions and 700 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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>&
|
||||
|
|
|
@ -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>::
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue