[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