move_assign.pass.cpp revision 13aaf422e49fa4b66642966bfc6078b5d9adde12
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// <fstream>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_fstream
14
15// basic_fstream& operator=(basic_fstream&& rhs);
16
17#include <fstream>
18#include <cassert>
19
20int main()
21{
22#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
23    char temp[L_tmpnam];
24    {
25        std::fstream fso(temp, std::ios_base::in | std::ios_base::out
26                                                 | std::ios_base::trunc);
27        std::fstream fs;
28        fs = move(fso);
29        double x = 0;
30        fs << 3.25;
31        fs.seekg(0);
32        fs >> x;
33        assert(x == 3.25);
34    }
35    std::remove(temp);
36    {
37        std::wfstream fso(temp, std::ios_base::in | std::ios_base::out
38                                                  | std::ios_base::trunc);
39        std::wfstream fs;
40        fs = move(fso);
41        double x = 0;
42        fs << 3.25;
43        fs.seekg(0);
44        fs >> x;
45        assert(x == 3.25);
46    }
47    std::remove(temp);
48#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
49}
50