move.pass.cpp revision 256813f4e7915d64776a4edd5f4765d893b9f062
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This file is distributed under the University of Illinois Open Source
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// License. See LICENSE.TXT for details.
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <istream>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// template <class charT, class traits = char_traits<charT> >
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// class basic_iostream;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// basic_iostream(basic_iostream&& rhs);
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <istream>
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cassert>
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _LIBCPP_MOVE
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)template <class CharT>
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct testbuf
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : public std::basic_streambuf<CharT>
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    testbuf() {}
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <class CharT>
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistruct test_iostream
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : public std::basic_iostream<CharT>
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    typedef std::basic_iostream<CharT> base;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test_iostream(testbuf<CharT>* sb) : base(sb) {}
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    test_iostream(test_iostream&& s)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        : base(std::move(s)) {}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // _LIBCPP_MOVE
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int main()
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef _LIBCPP_MOVE
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    {
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        testbuf<char> sb;
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        test_iostream<char> is1(&sb);
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        test_iostream<char> is(std::move(is1));
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(is1.rdbuf() == &sb);
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(is1.gcount() == 0);
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(is.gcount() == 0);
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        assert(is.rdbuf() == 0);
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        assert(is.tie() == 0);
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        assert(is.fill() == ' ');
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(is.rdstate() == is.goodbit);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(is.exceptions() == is.goodbit);
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        assert(is.flags() == (is.skipws | is.dec));
58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        assert(is.precision() == 6);
59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        assert(is.getloc().name() == "C");
60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        testbuf<wchar_t> sb;
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        test_iostream<wchar_t> is1(&sb);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        test_iostream<wchar_t> is(std::move(is1));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assert(is1.gcount() == 0);
66        assert(is.gcount() == 0);
67        assert(is1.rdbuf() == &sb);
68        assert(is.rdbuf() == 0);
69        assert(is.tie() == 0);
70        assert(is.fill() == L' ');
71        assert(is.rdstate() == is.goodbit);
72        assert(is.exceptions() == is.goodbit);
73        assert(is.flags() == (is.skipws | is.dec));
74        assert(is.precision() == 6);
75        assert(is.getloc().name() == "C");
76    }
77#endif  // _LIBCPP_MOVE
78}
79