15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a83710eSEric Fiselier // 75a83710eSEric Fiselier //===----------------------------------------------------------------------===// 85a83710eSEric Fiselier 95a83710eSEric Fiselier // <sstream> 105a83710eSEric Fiselier 115a83710eSEric Fiselier // template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > 125a83710eSEric Fiselier // class basic_stringbuf 135a83710eSEric Fiselier 14*a11f8b1aSMarek Kurdej // explicit basic_stringbuf(ios_base::openmode which = ios_base::in | ios_base::out); // before C++20 15*a11f8b1aSMarek Kurdej // basic_stringbuf() : basic_stringbuf(ios_base::in | ios_base::out) {} // C++20 16*a11f8b1aSMarek Kurdej // explicit basic_stringbuf(ios_base::openmode which); // C++20 175a83710eSEric Fiselier 185a83710eSEric Fiselier #include <sstream> 195a83710eSEric Fiselier #include <cassert> 205a83710eSEric Fiselier 217fc6a556SMarshall Clow #include "test_macros.h" 22*a11f8b1aSMarek Kurdej #if TEST_STD_VER >= 11 23*a11f8b1aSMarek Kurdej #include "test_convertible.h" 24*a11f8b1aSMarek Kurdej #endif 257fc6a556SMarshall Clow 26378ae52bSZhihao Yuan template<typename CharT> 27378ae52bSZhihao Yuan struct testbuf 28378ae52bSZhihao Yuan : std::basic_stringbuf<CharT> 29378ae52bSZhihao Yuan { 30378ae52bSZhihao Yuan void check() 31378ae52bSZhihao Yuan { 32378ae52bSZhihao Yuan assert(this->eback() == NULL); 33378ae52bSZhihao Yuan assert(this->gptr() == NULL); 34378ae52bSZhihao Yuan assert(this->egptr() == NULL); 35378ae52bSZhihao Yuan assert(this->pbase() == NULL); 36378ae52bSZhihao Yuan assert(this->pptr() == NULL); 37378ae52bSZhihao Yuan assert(this->epptr() == NULL); 38378ae52bSZhihao Yuan } 39378ae52bSZhihao Yuan }; 40378ae52bSZhihao Yuan 412df59c50SJF Bastien int main(int, char**) 425a83710eSEric Fiselier { 435a83710eSEric Fiselier { 445a83710eSEric Fiselier std::stringbuf buf; 455a83710eSEric Fiselier assert(buf.str() == ""); 465a83710eSEric Fiselier } 475a83710eSEric Fiselier { 485a83710eSEric Fiselier std::wstringbuf buf; 495a83710eSEric Fiselier assert(buf.str() == L""); 505a83710eSEric Fiselier } 51378ae52bSZhihao Yuan { 52378ae52bSZhihao Yuan testbuf<char> buf; 53378ae52bSZhihao Yuan buf.check(); 54378ae52bSZhihao Yuan } 55378ae52bSZhihao Yuan { 56378ae52bSZhihao Yuan testbuf<wchar_t> buf; 57378ae52bSZhihao Yuan buf.check(); 58378ae52bSZhihao Yuan } 592df59c50SJF Bastien 60*a11f8b1aSMarek Kurdej #if TEST_STD_VER >= 11 61*a11f8b1aSMarek Kurdej { 62*a11f8b1aSMarek Kurdej typedef std::stringbuf B; 63*a11f8b1aSMarek Kurdej static_assert(test_convertible<B>(), ""); 64*a11f8b1aSMarek Kurdej static_assert(!test_convertible<B, std::ios_base::openmode>(), ""); 65*a11f8b1aSMarek Kurdej } 66*a11f8b1aSMarek Kurdej #endif 67*a11f8b1aSMarek Kurdej 682df59c50SJF Bastien return 0; 695a83710eSEric Fiselier } 70