[PATCH] D65105: [libc++] Implement LWG 3199

Louis Dionne via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 20 11:20:15 PDT 2019


This revision was automatically updated to reflect the committed changes.
Closed by commit rL369422: [libc++] Implement LWG 3199 (authored by ldionne, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D65105?vs=211156&id=216198#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65105/new/

https://reviews.llvm.org/D65105

Files:
  libcxx/trunk/include/istream
  libcxx/trunk/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp
  libcxx/trunk/www/upcoming_meeting.html


Index: libcxx/trunk/www/upcoming_meeting.html
===================================================================
--- libcxx/trunk/www/upcoming_meeting.html
+++ libcxx/trunk/www/upcoming_meeting.html
@@ -71,7 +71,7 @@
 <tr><td><a href="https://wg21.link/LWG3191">3191</a></td><td>Yes</td><td><tt>std::ranges::shuffle</tt> synopsis does not match algorithm definition</td><td>Cologne</td><td></td></tr>
 <tr><td><a href="https://wg21.link/LWG3196">3196</a></td><td>Yes</td><td><tt>std::optional<T></tt> is ill-formed is <tt>T</tt> is an array</td><td>Cologne</td><td>Complete</td></tr>
 <tr><td><a href="https://wg21.link/LWG3198">3198</a></td><td>Yes</td><td>Bad constraint on <tt>std::span::span()</tt></td><td>Cologne</td><td>Complete</td></tr>
-<tr><td><a href="https://wg21.link/LWG3199">3199</a></td><td>Yes</td><td><tt>istream >> bitset<0></tt> fails</td><td>Cologne</td><td></td></tr>
+<tr><td><a href="https://wg21.link/LWG3199">3199</a></td><td>Yes</td><td><tt>istream >> bitset<0></tt> fails</td><td>Cologne</td><td>Complete</td></tr>
 <tr><td><a href="https://wg21.link/LWG3202">3202</a></td><td>Yes</td><td>P0318R1 was supposed to be revised</td><td>Cologne</td><td>Complete</td></tr>
 <tr><td><a href="https://wg21.link/LWG3206">3206</a></td><td>Yes</td><td><tt>year_month_day</tt> conversion to <tt>sys_days</tt> uses not-existing member function</td><td>Cologne</td><td>Complete</td></tr>
 <tr><td><a href="https://wg21.link/LWG3208">3208</a></td><td>Yes</td><td><tt>Boolean</tt>'s expression requirements are ordered inconsistently</td><td>Cologne</td><td>Nothing to do</td></tr>
@@ -105,7 +105,6 @@
 <li>3191 - We don't do ranges yet</li>
 <li>3196 - We already do this</li>
 <li>3198 - We already do this</li>
-<li>3199 - Louis</li>
 <li>3202 - We already do this</li>
 <li>3206 - We already do this; added a couple of explicit tests</li>
 <li>3208 - Nothing to do; wording cleanup</li>
Index: libcxx/trunk/include/istream
===================================================================
--- libcxx/trunk/include/istream
+++ libcxx/trunk/include/istream
@@ -1619,7 +1619,7 @@
                  __is.rdbuf()->sbumpc();
             }
             __x = bitset<_Size>(__str);
-            if (__c == 0)
+            if (_Size > 0 && __c == 0)
                __state |= ios_base::failbit;
 #ifndef _LIBCPP_NO_EXCEPTIONS
         }
Index: libcxx/trunk/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp
===================================================================
--- libcxx/trunk/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp
+++ libcxx/trunk/test/std/utilities/template.bitset/bitset.operators/stream_in.pass.cpp
@@ -25,6 +25,18 @@
         in >> b;
         assert(b.to_ulong() == 0x5A);
     }
+    {
+        // Make sure that input-streaming an empty bitset does not cause the
+        // failbit to be set (LWG 3199).
+        std::istringstream in("01011010");
+        std::bitset<0> b;
+        in >> b;
+        assert(b.to_string() == "");
+        assert(!in.bad());
+        assert(!in.fail());
+        assert(!in.eof());
+        assert(in.good());
+    }
 #ifndef TEST_HAS_NO_EXCEPTIONS
     {
         std::stringbuf sb;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D65105.216198.patch
Type: text/x-patch
Size: 3239 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190820/350689ef/attachment-0001.bin>


More information about the llvm-commits mailing list