ends.pass.cpp revision b64f8b07c104c6cc986570ac8ee0ed16a9f23976
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. 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
15// template <class charT, class traits>
16//   basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
17
18#include <ostream>
19#include <cassert>
20
21template <class CharT>
22class testbuf
23    : public std::basic_streambuf<CharT>
24{
25    typedef std::basic_streambuf<CharT> base;
26    std::basic_string<CharT> str_;
27public:
28    testbuf()
29    {
30    }
31
32    std::basic_string<CharT> str() const
33        {return std::basic_string<CharT>(base::pbase(), base::pptr());}
34
35protected:
36
37    virtual typename base::int_type
38        overflow(typename base::int_type __c = base::traits_type::eof())
39        {
40            if (__c != base::traits_type::eof())
41            {
42                int n = str_.size();
43                str_.push_back(__c);
44                str_.resize(str_.capacity());
45                base::setp(const_cast<CharT*>(str_.data()),
46                           const_cast<CharT*>(str_.data() + str_.size()));
47                base::pbump(n+1);
48            }
49            return __c;
50        }
51};
52
53int main()
54{
55    {
56        testbuf<char> sb;
57        std::ostream os(&sb);
58        ends(os);
59        assert(sb.str().size() == 1);
60        assert(sb.str().back() == 0);
61        assert(os.good());
62    }
63    {
64        testbuf<wchar_t> sb;
65        std::wostream os(&sb);
66        ends(os);
67        assert(sb.str().size() == 1);
68        assert(sb.str().back() == 0);
69        assert(os.good());
70    }
71}
72