re PR libstdc++/60270 ([C++1y] std::quoted is too eager to clear the string)

2014-03-31  Lars Gullik Bjønnes  <larsbj@gullik.org>
	    Jonathan Wakely  <jwakely@redhat.com>

	PR libstdc++/60270
	* include/std/iomanip (_Quoted_string operator>>): Do not clear
	string if input is not quoted.
	* testsuite/27_io/manipulators/standard/char/60270.cc: New.

Co-Authored-By: Jonathan Wakely <jwakely@redhat.com>

From-SVN: r208966
This commit is contained in:
Lars Gullik Bjønnes 2014-03-31 18:46:23 +00:00 committed by Jonathan Wakely
parent 0812493fc5
commit 71bdda5625
3 changed files with 47 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2014-03-31 Lars Gullik Bjønnes <larsbj@gullik.org>
Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/60270
* include/std/iomanip (_Quoted_string operator>>): Do not clear
string if input is not quoted.
* testsuite/27_io/manipulators/standard/char/60270.cc: New.
2014-03-31 Jonathan Wakely <jwakely@redhat.com>
* libsupc++/eh_ptr.cc: Improve static_assert messages.

View File

@ -415,8 +415,6 @@ _GLIBCXX_END_NAMESPACE_VERSION
const _Quoted_string<basic_string<_CharT, _Traits, _Alloc>&,
_CharT>& __str)
{
__str._M_string.clear();
_CharT __c;
__is >> __c;
if (!__is.good())
@ -427,6 +425,7 @@ _GLIBCXX_END_NAMESPACE_VERSION
__is >> __str._M_string;
return __is;
}
__str._M_string.clear();
std::ios_base::fmtflags __flags
= __is.flags(__is.flags() & ~std::ios_base::skipws);
do

View File

@ -0,0 +1,38 @@
// { dg-do run }
// { dg-options "-std=gnu++14" }
// Copyright (C) 2014 Free Software Foundation, Inc.
//
// 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
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// 27.7.6 - Quoted manipulators [quoted.manip]
// libstdc++/60270
#include <string>
#include <sstream>
#include <iomanip>
#include <testsuite_hooks.h>
int main()
{
std::istringstream in;
std::string s = "xxx";
in >> s;
VERIFY( !s.empty() );
in >> std::quoted(s);
VERIFY( !s.empty() );
}