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// REQUIRES: locale.en_US.UTF-8
11
12// <streambuf>
13
14// template <class charT, class traits = char_traits<charT> >
15// class basic_streambuf;
16
17// basic_streambuf(const basic_streambuf& rhs);
18
19#include <streambuf>
20#include <cassert>
21
22#include "platform_support.h" // locale name macros
23
24template <class CharT>
25struct test
26    : public std::basic_streambuf<CharT>
27{
28    typedef std::basic_streambuf<CharT> base;
29    test() {}
30
31    test(const test& t)
32        : std::basic_streambuf<CharT>(t)
33    {
34        assert(this->eback() == t.eback());
35        assert(this->gptr()  == t.gptr());
36        assert(this->egptr() == t.egptr());
37        assert(this->pbase() == t.pbase());
38        assert(this->pptr()  == t.pptr());
39        assert(this->epptr() == t.epptr());
40        assert(this->getloc() == t.getloc());
41    }
42
43    void setg(CharT* gbeg, CharT* gnext, CharT* gend)
44    {
45        base::setg(gbeg, gnext, gend);
46    }
47    void setp(CharT* pbeg, CharT* pend)
48    {
49        base::setp(pbeg, pend);
50    }
51};
52
53int main()
54{
55    {
56        test<char> t;
57        test<char> t2 = t;
58    }
59    {
60        test<wchar_t> t;
61        test<wchar_t> t2 = t;
62    }
63    {
64        char g1, g2, g3, p1, p3;
65        test<char> t;
66        t.setg(&g1, &g2, &g3);
67        t.setp(&p1, &p3);
68        test<char> 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 = t;
76    }
77    std::locale::global(std::locale(LOCALE_en_US_UTF_8));
78    {
79        test<char> t;
80        test<char> t2 = t;
81    }
82    {
83        test<wchar_t> t;
84        test<wchar_t> t2 = t;
85    }
86}
87