blob: 9a899edd8d83a800d39f88ee48ca1760065a0ca9 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <ostream>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_ostream;
14
Howard Hinnant256813f2010-08-22 00:26:48 +000015// template <class charT, class traits, class T>
16// basic_ostream<charT, traits>&
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000017// operator<<(basic_ostream<charT, traits>&& os, const T& x);
18
19#include <ostream>
20#include <cassert>
21
Howard Hinnant73d21a42010-09-04 23:28:19 +000022#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000023
24template <class CharT>
25class testbuf
26 : public std::basic_streambuf<CharT>
27{
28 typedef std::basic_streambuf<CharT> base;
29 std::basic_string<CharT> str_;
30public:
31 testbuf()
32 {
33 }
34
35 std::basic_string<CharT> str() const
36 {return std::basic_string<CharT>(base::pbase(), base::pptr());}
37
38protected:
39
40 virtual typename base::int_type
41 overflow(typename base::int_type __c = base::traits_type::eof())
42 {
43 if (__c != base::traits_type::eof())
44 {
45 int n = str_.size();
46 str_.push_back(__c);
47 str_.resize(str_.capacity());
48 base::setp(const_cast<CharT*>(str_.data()),
49 const_cast<CharT*>(str_.data() + str_.size()));
50 base::pbump(n+1);
51 }
52 return __c;
53 }
54};
55
Howard Hinnant73d21a42010-09-04 23:28:19 +000056#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000057
58int main()
59{
Howard Hinnant73d21a42010-09-04 23:28:19 +000060#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000061 {
62 testbuf<char> sb;
63 std::ostream(&sb) << "testing...";
64 assert(sb.str() == "testing...");
65 }
66 {
67 testbuf<wchar_t> sb;
68 std::wostream(&sb) << L"123";
69 assert(sb.str() == L"123");
70 }
Howard Hinnant73d21a42010-09-04 23:28:19 +000071#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000072}