istream.tcc (basic_istream<_CharT, [...]): Don't use sentry.

2001-03-06  Benjamin Kosnik  <bkoz@redhat.com>

	libstdc++/2181
	* include/bits/istream.tcc (basic_istream<_CharT, _Traits>::
	operator>>(__istream_type& (*__pf)(__istream_type&)): Don't use
	sentry.
	(basic_istream<_CharT, _Traits>:: operator>>(__ios_type&
	(*__pf)(__ios_type&)): Same.
	(basic_istream<_CharT, _Traits>:: operator>>(ios_base&
	(*__pf)(ios_base&))): Same.
	* testsuite/27_io/istream_extractor_other.cc: Add tests.
	* testsuite/27_io/istream_manip.cc (test01): Fix.

From-SVN: r40281
This commit is contained in:
Benjamin Kosnik 2001-03-07 02:08:59 +00:00 committed by Benjamin Kosnik
parent cc93758139
commit 2077a6c51e
4 changed files with 42 additions and 52 deletions

View File

@ -1,3 +1,16 @@
2001-03-06 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/2181
* include/bits/istream.tcc (basic_istream<_CharT, _Traits>::
operator>>(__istream_type& (*__pf)(__istream_type&)): Don't use
sentry.
(basic_istream<_CharT, _Traits>:: operator>>(__ios_type&
(*__pf)(__ios_type&)): Same.
(basic_istream<_CharT, _Traits>:: operator>>(ios_base&
(*__pf)(ios_base&))): Same.
* testsuite/27_io/istream_extractor_other.cc: Add tests.
* testsuite/27_io/istream_manip.cc (test01): Fix.
2001-03-06 Nathan Myers <ncm@cantrip.org>
Benjamin Kosnik <bkoz@redhat.com>

View File

@ -81,20 +81,7 @@ namespace std {
basic_istream<_CharT, _Traits>::
operator>>(__istream_type& (*__pf)(__istream_type&))
{
sentry __cerb(*this, false);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
}
__pf(*this);
return *this;
}
@ -103,20 +90,7 @@ namespace std {
basic_istream<_CharT, _Traits>::
operator>>(__ios_type& (*__pf)(__ios_type&))
{
sentry __cerb(*this, false);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
}
__pf(*this);
return *this;
}
@ -125,20 +99,7 @@ namespace std {
basic_istream<_CharT, _Traits>::
operator>>(ios_base& (*__pf)(ios_base&))
{
sentry __cerb(*this, false);
if (__cerb)
{
try {
__pf(*this);
}
catch(exception& __fail){
// 27.6.1.2.1 Common requirements.
// Turn this on without causing an ios::failure to be thrown.
this->setstate(ios_base::badbit);
if ((this->exceptions() & ios_base::badbit) != 0)
__throw_exception_again;
}
}
__pf(*this);
return *this;
}

View File

@ -1,6 +1,6 @@
// 1999-07-28 bkoz
// Copyright (C) 1999 Free Software Foundation
// Copyright (C) 1999, 2001 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -55,14 +55,6 @@ bool test01() {
statefail = std::ios_base::failbit;
stateeof = std::ios_base::eofbit;
// template<_CharT, _Traits>
// basic_istream& operator>>(basic_istream& (*pf) (basic_istream&))
// template<_CharT, _Traits>
// basic_istream& operator>>(basic_ios& (*pf) (basic_ios&))
// template<_CharT, _Traits>
// basic_istream& operator>>(ios_base& (*pf) (ios_base&))
// template<_CharT, _Traits>
// basic_istream& operator>>(basic_streambuf*)
@ -184,10 +176,34 @@ bool test02() {
return test;
}
void test03()
{
using namespace std;
bool test = true;
// template<_CharT, _Traits>
// basic_istream& operator>>(ios_base& (*pf) (ios_base&))
{
int i = 0;
std::istringstream iss(" 43");
iss >> std::noskipws >> i;
std::ios::iostate i3 = iss.rdstate();
VERIFY ( !iss ); //should set failbit
}
// template<_CharT, _Traits>
// basic_istream& operator>>(basic_ios& (*pf) (basic_ios&))
// template<_CharT, _Traits>
// basic_istream& operator>>(basic_istream& (*pf) (basic_istream&))
}
int main()
{
test01();
test02();
test03();
return 0;
}

View File

@ -70,7 +70,7 @@ bool test01(void)
VERIFY( !iss02.eof() );
iss01 >> std::ws;
VERIFY( iss01.fail() );
VERIFY( !iss01.fail() );
VERIFY( iss01.eof() );
#ifdef DEBUG_ASSERT