10b8c8bc8SPiotr Fusik //===----------------------------------------------------------------------===// 20b8c8bc8SPiotr Fusik // 30b8c8bc8SPiotr Fusik // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b8c8bc8SPiotr Fusik // See https://llvm.org/LICENSE.txt for license information. 50b8c8bc8SPiotr Fusik // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b8c8bc8SPiotr Fusik // 70b8c8bc8SPiotr Fusik //===----------------------------------------------------------------------===// 80b8c8bc8SPiotr Fusik 90b8c8bc8SPiotr Fusik // <sstream> 100b8c8bc8SPiotr Fusik 110b8c8bc8SPiotr Fusik // template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > 120b8c8bc8SPiotr Fusik // class basic_stringstream 130b8c8bc8SPiotr Fusik 140b8c8bc8SPiotr Fusik // basic_stringstream(basic_stringstream&& rhs); 150b8c8bc8SPiotr Fusik 16*b9a2658aSNikolas Klauser // XFAIL: FROZEN-CXX03-HEADERS-FIXME 17*b9a2658aSNikolas Klauser 180b8c8bc8SPiotr Fusik #include <sstream> 190b8c8bc8SPiotr Fusik #include <cassert> 200b8c8bc8SPiotr Fusik 210b8c8bc8SPiotr Fusik #include "test_macros.h" 224dee6411SMark de Wever #include "operator_hijacker.h" 230b8c8bc8SPiotr Fusik 240b8c8bc8SPiotr Fusik int main(int, char**) 250b8c8bc8SPiotr Fusik { 260b8c8bc8SPiotr Fusik { 270b8c8bc8SPiotr Fusik std::stringstream ss0(" 123 456 "); 280b8c8bc8SPiotr Fusik std::stringstream ss(std::move(ss0)); 294dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 304dee6411SMark de Wever assert(ss.good()); 314dee6411SMark de Wever assert(ss.str() == " 123 456 "); 324dee6411SMark de Wever int i = 0; 334dee6411SMark de Wever ss >> i; 344dee6411SMark de Wever assert(i == 123); 354dee6411SMark de Wever ss >> i; 364dee6411SMark de Wever assert(i == 456); 374dee6411SMark de Wever ss << i << ' ' << 123; 384dee6411SMark de Wever assert(ss.str() == "456 1236 "); 394dee6411SMark de Wever } 404dee6411SMark de Wever { 414dee6411SMark de Wever std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss0(" 123 456 "); 424dee6411SMark de Wever std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(std::move(ss0)); 434dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 440b8c8bc8SPiotr Fusik assert(ss.good()); 450b8c8bc8SPiotr Fusik assert(ss.str() == " 123 456 "); 460b8c8bc8SPiotr Fusik int i = 0; 470b8c8bc8SPiotr Fusik ss >> i; 480b8c8bc8SPiotr Fusik assert(i == 123); 490b8c8bc8SPiotr Fusik ss >> i; 500b8c8bc8SPiotr Fusik assert(i == 456); 510b8c8bc8SPiotr Fusik ss << i << ' ' << 123; 520b8c8bc8SPiotr Fusik assert(ss.str() == "456 1236 "); 530b8c8bc8SPiotr Fusik } 540b8c8bc8SPiotr Fusik #ifndef TEST_HAS_NO_WIDE_CHARACTERS 550b8c8bc8SPiotr Fusik { 560b8c8bc8SPiotr Fusik std::wstringstream ss0(L" 123 456 "); 570b8c8bc8SPiotr Fusik std::wstringstream ss(std::move(ss0)); 584dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 594dee6411SMark de Wever assert(ss.good()); 604dee6411SMark de Wever assert(ss.str() == L" 123 456 "); 614dee6411SMark de Wever int i = 0; 624dee6411SMark de Wever ss >> i; 634dee6411SMark de Wever assert(i == 123); 644dee6411SMark de Wever ss >> i; 654dee6411SMark de Wever assert(i == 456); 664dee6411SMark de Wever ss << i << ' ' << 123; 674dee6411SMark de Wever assert(ss.str() == L"456 1236 "); 684dee6411SMark de Wever } 694dee6411SMark de Wever { 704dee6411SMark de Wever std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss0( 714dee6411SMark de Wever L" 123 456 "); 724dee6411SMark de Wever std::basic_stringstream<wchar_t, std::char_traits<wchar_t>, operator_hijacker_allocator<wchar_t> > ss( 734dee6411SMark de Wever std::move(ss0)); 744dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 750b8c8bc8SPiotr Fusik assert(ss.good()); 760b8c8bc8SPiotr Fusik assert(ss.str() == L" 123 456 "); 770b8c8bc8SPiotr Fusik int i = 0; 780b8c8bc8SPiotr Fusik ss >> i; 790b8c8bc8SPiotr Fusik assert(i == 123); 800b8c8bc8SPiotr Fusik ss >> i; 810b8c8bc8SPiotr Fusik assert(i == 456); 820b8c8bc8SPiotr Fusik ss << i << ' ' << 123; 830b8c8bc8SPiotr Fusik assert(ss.str() == L"456 1236 "); 840b8c8bc8SPiotr Fusik } 850b8c8bc8SPiotr Fusik #endif 860b8c8bc8SPiotr Fusik 870b8c8bc8SPiotr Fusik return 0; 880b8c8bc8SPiotr Fusik } 89