assign.pass.cpp revision f5256e16dfc425c1d466f6308d4026d529ce9e0b
1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <streambuf>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_streambuf;
14
15// basic_streambuf& operator=(const basic_streambuf& rhs);
16
17#include <streambuf>
18#include <cassert>
19
20template <class CharT>
21struct test
22    : public std::basic_streambuf<CharT>
23{
24    typedef std::basic_streambuf<CharT> base;
25    test() {}
26
27    test& operator=(const test& t)
28    {
29        base::operator=(t);
30        assert(this->eback() == t.eback());
31        assert(this->gptr()  == t.gptr());
32        assert(this->egptr() == t.egptr());
33        assert(this->pbase() == t.pbase());
34        assert(this->pptr()  == t.pptr());
35        assert(this->epptr() == t.epptr());
36        assert(this->getloc() == t.getloc());
37        return *this;
38    }
39
40    void setg(CharT* gbeg, CharT* gnext, CharT* gend)
41    {
42        base::setg(gbeg, gnext, gend);
43    }
44    void setp(CharT* pbeg, CharT* pend)
45    {
46        base::setp(pbeg, pend);
47    }
48};
49
50int main()
51{
52    {
53        test<char> t;
54        test<char> t2;
55        t2 = t;
56    }
57    {
58        test<wchar_t> t;
59        test<wchar_t> t2;
60        t2 = t;
61    }
62    {
63        char g1, g2, g3, p1, p3;
64        test<char> t;
65        t.setg(&g1, &g2, &g3);
66        t.setp(&p1, &p3);
67        test<char> t2;
68        t2 = t;
69    }
70    {
71        wchar_t g1, g2, g3, p1, p3;
72        test<wchar_t> t;
73        t.setg(&g1, &g2, &g3);
74        t.setp(&p1, &p3);
75        test<wchar_t> t2;
76        t2 = t;
77    }
78    std::locale::global(std::locale("en_US"));
79    {
80        test<char> t;
81        test<char> t2;
82        t2 = t;
83    }
84    {
85        test<wchar_t> t;
86        test<wchar_t> t2;
87        t2 = t;
88    }
89}
90