summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/input.output
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2018-09-19 18:29:57 +0000
committerMarshall Clow <mclow.lists@gmail.com>2018-09-19 18:29:57 +0000
commit4a71f9cfcc0369d8b90412ab09ef7ae812440ef1 (patch)
tree6ee9a8cb973b2fc59a8695bc178f37c30faf91a2 /libcxx/test/std/input.output
parent29bf94d86fba0babf426e3d25abaae24dd9971bd (diff)
downloadbcm5719-llvm-4a71f9cfcc0369d8b90412ab09ef7ae812440ef1.tar.gz
bcm5719-llvm-4a71f9cfcc0369d8b90412ab09ef7ae812440ef1.zip
Implement LWG 2221 - No formatted output operator for nullptr. Reviewed as https://reviews.llvm.org/D44263
llvm-svn: 342566
Diffstat (limited to 'libcxx/test/std/input.output')
-rw-r--r--libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp b/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp
new file mode 100644
index 00000000000..0893b2b07a8
--- /dev/null
+++ b/libcxx/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters/nullptr.pass.cpp
@@ -0,0 +1,80 @@
+//===----------------------------------------------------------------------===//
+//
+// 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
+ }
+}
OpenPOWER on IntegriCloud