[libcxx] r342599 - Revert "Implement LWG 2221 - No formatted output operator for nullptr."

Volodymyr Sapsai vsapsai at apple.com
Wed Sep 19 16:31:35 PDT 2018


Author: vsapsai
Date: Wed Sep 19 16:31:34 2018
New Revision: 342599

URL: http://llvm.org/viewvc/llvm-project?rev=342599&view=rev
Log:
Revert "Implement LWG 2221 - No formatted output operator for nullptr."

This reverts r342566 as it causes on bots linker errors like

> Undefined symbols for architecture i386:
>   "std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(std::nullptr_t)", referenced from:

Removed:
    libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp
Modified:
    libcxx/trunk/include/ostream
    libcxx/trunk/www/cxx1z_status.html

Modified: libcxx/trunk/include/ostream
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ostream?rev=342599&r1=342598&r2=342599&view=diff
==============================================================================
--- libcxx/trunk/include/ostream (original)
+++ libcxx/trunk/include/ostream Wed Sep 19 16:31:34 2018
@@ -56,7 +56,6 @@ public:
     basic_ostream& operator<<(double f);
     basic_ostream& operator<<(long double f);
     basic_ostream& operator<<(const void* p);
-    basic_ostream<charT, traits>& operator<<(nullptr_t);   // C++17
     basic_ostream& operator<<(basic_streambuf<char_type,traits>* sb);
 
     // 27.7.2.7 Unformatted output:
@@ -217,7 +216,6 @@ public:
     basic_ostream& operator<<(double __f);
     basic_ostream& operator<<(long double __f);
     basic_ostream& operator<<(const void* __p);
-    basic_ostream& operator<<(nullptr_t);
     basic_ostream& operator<<(basic_streambuf<char_type, traits_type>* __sb);
 
     // 27.7.2.7 Unformatted output:
@@ -711,14 +709,6 @@ basic_ostream<_CharT, _Traits>::operator
     return *this;
 }
 
-template <class _CharT, class _Traits>
-basic_ostream<_CharT, _Traits>&
-basic_ostream<_CharT, _Traits>::operator<<(nullptr_t)
-{
-	return *this << "(nullptr)";
-}
-
-
 template<class _CharT, class _Traits>
 basic_ostream<_CharT, _Traits>&
 __put_character_sequence(basic_ostream<_CharT, _Traits>& __os,
@@ -752,6 +742,7 @@ __put_character_sequence(basic_ostream<_
     return __os;
 }
 
+
 template<class _CharT, class _Traits>
 basic_ostream<_CharT, _Traits>&
 operator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c)

Removed: libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp?rev=342598&view=auto
==============================================================================
--- libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp (original)
+++ libcxx/trunk/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp (removed)
@@ -1,80 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// <ostream>
-
-// template <class charT, class traits = char_traits<charT> >
-//   class basic_ostream;
-
-// template<class charT, class traits>
-//   basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>& out, nullptr_t);
-//
-
-#include <ostream>
-#include <cassert>
-#include "test_macros.h"
-
-template <class CharT>
-class testbuf
-    : public std::basic_streambuf<CharT>
-{
-    typedef std::basic_streambuf<CharT> base;
-    std::basic_string<CharT> str_;
-public:
-    testbuf()
-    {
-    }
-
-    std::basic_string<CharT> str() const
-        {return std::basic_string<CharT>(base::pbase(), base::pptr());}
-
-protected:
-
-    virtual typename base::int_type
-        overflow(typename base::int_type ch = base::traits_type::eof())
-        {
-            if (ch != base::traits_type::eof())
-            {
-                int n = static_cast<int>(str_.size());
-                str_.push_back(ch);
-                str_.resize(str_.capacity());
-                base::setp(const_cast<CharT*>(str_.data()),
-                           const_cast<CharT*>(str_.data() + str_.size()));
-                base::pbump(n+1);
-            }
-            return ch;
-        }
-};
-
-int main()
-{
-    {
-        std::wostream os((std::wstreambuf*)0);
-        os << nullptr;
-        assert(os.bad());
-        assert(os.fail());
-    }
-    {
-        testbuf<char> sb;
-        std::ostream os(&sb);
-        assert(sb.str().length() == 0);
-        os << nullptr;
-        assert(sb.str().length() > 0);
-        LIBCPP_ASSERT(sb.str() == "(nullptr)");  // output is an implementation-defined NTCTS
-    }
-
-    {
-        testbuf<wchar_t> sb;
-        std::wostream os(&sb);
-        assert(sb.str().length() == 0);
-        os << nullptr;
-        assert(sb.str().length() > 0);
-        LIBCPP_ASSERT(sb.str() == L"(nullptr)");  // output is an implementation-defined NTCTS
-    }
-}

Modified: libcxx/trunk/www/cxx1z_status.html
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/www/cxx1z_status.html?rev=342599&r1=342598&r2=342599&view=diff
==============================================================================
--- libcxx/trunk/www/cxx1z_status.html (original)
+++ libcxx/trunk/www/cxx1z_status.html Wed Sep 19 16:31:34 2018
@@ -365,7 +365,7 @@
  	<tr><td></td><td></td><td></td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG2062">2062</a></td><td>Effect contradictions w/o no-throw guarantee of std::function swaps</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="https://wg21.link/LWG2166">2166</a></td><td>Heap property underspecified?</td><td>Issaquah</td><td></td></tr>
-	<tr><td><a href="https://wg21.link/LWG2221">2221</a></td><td>No formatted output operator for nullptr</td><td>Issaquah</td><td>Complete</td></tr>
+	<tr><td><a href="https://wg21.link/LWG2221">2221</a></td><td>No formatted output operator for nullptr</td><td>Issaquah</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG2223">2223</a></td><td>shrink_to_fit effect on iterator validity</td><td>Issaquah</td><td>Complete</td></tr>
 	<tr><td><a href="https://wg21.link/LWG2261">2261</a></td><td>Are containers required to use their 'pointer' type internally?</td><td>Issaquah</td><td></td></tr>
 	<tr><td><a href="https://wg21.link/LWG2394">2394</a></td><td>locale::name specification unclear - what is implementation-defined?</td><td>Issaquah</td><td>Complete</td></tr>
@@ -504,7 +504,7 @@
 <!-- 	<tr><td></td><td></td><td></td><td></td></tr> -->
   </table>
 
-  <p>Last Updated: 19-Sep-2018</p>
+  <p>Last Updated: 3-Aug-2018</p>
 </div>
 </body>
 </html>




More information about the libcxx-commits mailing list