diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-15 17:27:23 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-15 17:27:23 +0000 |
commit | 22cbb21e653545a1891f33e34414ac46f3e5e813 (patch) | |
tree | 98f62ab59a889a5d7e2c70f0f1025004dd906ddf /libstdc++-v3/include/bits | |
parent | 2e667208ae346457eb476e12776ae238e120c8cd (diff) | |
download | ppe42-gcc-22cbb21e653545a1891f33e34414ac46f3e5e813.tar.gz ppe42-gcc-22cbb21e653545a1891f33e34414ac46f3e5e813.zip |
2005-09-15 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/23875
* include/std/std_ostream.h (operator<<(short), operator<<(unsigned
short), operator<<(int), operator<<(unsigned int), operator<<(float)):
Don't call operator<<(long), operator<<(unsigned long), or
operator<<(double), do the work mandated by the resolution of DR117...
* include/bits/ostream.tcc (operator<<(short), operator<<(unsigned
short), operator<<(int), operator<<(unsigned int), operator<<(float)):
... here.
* testsuite/27_io/basic_ostream/inserters_arithmetic/pod/23875.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104313 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/bits')
-rw-r--r-- | libstdc++-v3/include/bits/ostream.tcc | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc index cd9585073ae..e26ad50d6b8 100644 --- a/libstdc++-v3/include/bits/ostream.tcc +++ b/libstdc++-v3/include/bits/ostream.tcc @@ -122,6 +122,122 @@ namespace std 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); @@ -216,6 +332,32 @@ namespace std 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); |