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 // <ios>
11 
12 // template <class charT, class traits> class basic_ios
13 
14 // void set_rdbuf(basic_streambuf<charT, traits>* sb);
15 
16 #include <ios>
17 #include <streambuf>
18 #include <cassert>
19 
20 struct testbuf
21     : public std::streambuf
22 {
23 };
24 
25 struct testios
26     : public std::ios
27 {
testiostestios28     testios(std::streambuf* p) : std::ios(p) {}
set_rdbuftestios29     void set_rdbuf(std::streambuf* x) {std::ios::set_rdbuf(x);}
30 };
31 
main()32 int main()
33 {
34     testbuf sb1;
35     testbuf sb2;
36     testios ios(&sb1);
37     try
38     {
39         ios.setstate(std::ios::badbit);
40         ios.exceptions(std::ios::badbit);
41     }
42     catch (...)
43     {
44     }
45     ios.set_rdbuf(&sb2);
46     assert(ios.rdbuf() == &sb2);
47     try
48     {
49         ios.setstate(std::ios::badbit);
50         ios.exceptions(std::ios::badbit);
51     }
52     catch (...)
53     {
54     }
55     ios.set_rdbuf(0);
56     assert(ios.rdbuf() == 0);
57 }
58