1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <sstream> 10 11 // template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > 12 // class basic_stringstream 13 14 // basic_stringstream(basic_stringstream&& rhs); 15 16 // XFAIL: FROZEN-CXX03-HEADERS-FIXME 17 18 #include <sstream> 19 #include <cassert> 20 21 #include "test_macros.h" 22 #include "operator_hijacker.h" 23 24 int main(int, char**) 25 { 26 { 27 std::stringstream ss0(" 123 456 "); 28 std::stringstream ss(std::move(ss0)); 29 assert(ss.rdbuf() != nullptr); 30 assert(ss.good()); 31 assert(ss.str() == " 123 456 "); 32 int i = 0; 33 ss >> i; 34 assert(i == 123); 35 ss >> i; 36 assert(i == 456); 37 ss << i << ' ' << 123; 38 assert(ss.str() == "456 1236 "); 39 } 40 { 41 std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss0(" 123 456 "); 42 std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(std::move(ss0)); 43 assert(ss.rdbuf() != nullptr); 44 assert(ss.good()); 45 assert(ss.str() == " 123 456 "); 46 int i = 0; 47 ss >> i; 48 assert(i == 123); 49 ss >> i; 50 assert(i == 456); 51 ss << i << ' ' << 123; 52 assert(ss.str() == "456 1236 "); 53 } 54 #ifndef TEST_HAS_NO_WIDE_CHARACTERS 55 { 56 std::wstringstream ss0(L" 123 456 "); 57 std::wstringstream ss(std::move(ss0)); 58 assert(ss.rdbuf() != nullptr); 59 assert(ss.good()); 60 assert(ss.str() == L" 123 456 "); 61 int i = 0; 62 ss >> i; 63 assert(i == 123); 64 ss >> i; 65 assert(i == 456); 66 ss << i << ' ' << 123; 67 assert(ss.str() == L"456 1236 "); 68 } 69 { 70 std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss0( 71 L" 123 456 "); 72 std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss( 73 std::move(ss0)); 74 assert(ss.rdbuf() != nullptr); 75 assert(ss.good()); 76 assert(ss.str() == L" 123 456 "); 77 int i = 0; 78 ss >> i; 79 assert(i == 123); 80 ss >> i; 81 assert(i == 456); 82 ss << i << ' ' << 123; 83 assert(ss.str() == L"456 1236 "); 84 } 85 #endif 86 87 return 0; 88 } 89