]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libstdc++/60270 ([C++1y] std::quoted is too eager to clear the string)
authorLars Gullik Bjønnes <larsbj@gullik.org>
Mon, 31 Mar 2014 18:46:23 +0000 (18:46 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 31 Mar 2014 18:46:23 +0000 (19:46 +0100)
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

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/iomanip
libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc [new file with mode: 0644]

index b1c0c60c638fe7cc26650ac038fa133e4e4b260c..1fe140ec8e2304afa947e2a942f889fea0c6d7dd 100644 (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.
index b2c7b951bc24f9df7cfe6689896b94f8debf6238..73822db9b20cb5de0c4b29c8f6a219d41ec7318f 100644 (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
diff --git a/libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc b/libstdc++-v3/testsuite/27_io/manipulators/standard/char/60270.cc
new file mode 100644 (file)
index 0000000..b2b213b
--- /dev/null
@@ -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() );
+}