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 // explicit basic_stringstream(ios_base::openmode which = ios_base::out | ios_base::in); // before C++20 150b8c8bc8SPiotr Fusik // basic_stringstream() : basic_stringstream(ios_base::out | ios_base::in) {} // C++20 160b8c8bc8SPiotr Fusik // explicit basic_stringstream(ios_base::openmode which); // C++20 170b8c8bc8SPiotr Fusik 18*b9a2658aSNikolas Klauser // XFAIL: FROZEN-CXX03-HEADERS-FIXME 19*b9a2658aSNikolas Klauser 200b8c8bc8SPiotr Fusik #include <sstream> 210b8c8bc8SPiotr Fusik #include <cassert> 220b8c8bc8SPiotr Fusik 230b8c8bc8SPiotr Fusik #include "test_macros.h" 244dee6411SMark de Wever #include "operator_hijacker.h" 250b8c8bc8SPiotr Fusik #if TEST_STD_VER >= 11 260b8c8bc8SPiotr Fusik #include "test_convertible.h" 270b8c8bc8SPiotr Fusik 280b8c8bc8SPiotr Fusik template <typename S> 290b8c8bc8SPiotr Fusik void test() { 300b8c8bc8SPiotr Fusik static_assert(test_convertible<S>(), ""); 310b8c8bc8SPiotr Fusik static_assert(!test_convertible<S, std::ios_base::openmode>(), ""); 320b8c8bc8SPiotr Fusik } 330b8c8bc8SPiotr Fusik #endif 340b8c8bc8SPiotr Fusik 350b8c8bc8SPiotr Fusik int main(int, char**) 360b8c8bc8SPiotr Fusik { 370b8c8bc8SPiotr Fusik { 380b8c8bc8SPiotr Fusik std::stringstream ss; 394dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 404dee6411SMark de Wever assert(ss.good()); 414dee6411SMark de Wever assert(ss.str() == ""); 424dee6411SMark de Wever } 434dee6411SMark de Wever { 444dee6411SMark de Wever std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss; 454dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 460b8c8bc8SPiotr Fusik assert(ss.good()); 470b8c8bc8SPiotr Fusik assert(ss.str() == ""); 480b8c8bc8SPiotr Fusik } 490b8c8bc8SPiotr Fusik { 500b8c8bc8SPiotr Fusik std::stringstream ss(std::ios_base::in); 514dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 524dee6411SMark de Wever assert(ss.good()); 534dee6411SMark de Wever assert(ss.str() == ""); 544dee6411SMark de Wever } 554dee6411SMark de Wever { 564dee6411SMark de Wever std::basic_stringstream<char, std::char_traits<char>, operator_hijacker_allocator<char> > ss(std::ios_base::in); 574dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 580b8c8bc8SPiotr Fusik assert(ss.good()); 590b8c8bc8SPiotr Fusik assert(ss.str() == ""); 600b8c8bc8SPiotr Fusik } 610b8c8bc8SPiotr Fusik #ifndef TEST_HAS_NO_WIDE_CHARACTERS 620b8c8bc8SPiotr Fusik { 630b8c8bc8SPiotr Fusik std::wstringstream ss; 644dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 650b8c8bc8SPiotr Fusik assert(ss.good()); 660b8c8bc8SPiotr Fusik assert(ss.str() == L""); 670b8c8bc8SPiotr Fusik } 680b8c8bc8SPiotr Fusik { 690b8c8bc8SPiotr Fusik std::wstringstream ss(std::ios_base::in); 704dee6411SMark de Wever assert(ss.rdbuf() != nullptr); 710b8c8bc8SPiotr Fusik assert(ss.good()); 720b8c8bc8SPiotr Fusik assert(ss.str() == L""); 730b8c8bc8SPiotr Fusik } 740b8c8bc8SPiotr Fusik #endif 750b8c8bc8SPiotr Fusik 760b8c8bc8SPiotr Fusik #if TEST_STD_VER >= 11 770b8c8bc8SPiotr Fusik test<std::stringstream>(); 780b8c8bc8SPiotr Fusik # ifndef TEST_HAS_NO_WIDE_CHARACTERS 790b8c8bc8SPiotr Fusik test<std::wstringstream>(); 800b8c8bc8SPiotr Fusik # endif 810b8c8bc8SPiotr Fusik #endif 820b8c8bc8SPiotr Fusik 830b8c8bc8SPiotr Fusik return 0; 840b8c8bc8SPiotr Fusik } 85