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 14a11f8b1aSMarek Kurdej // explicit basic_stringbuf(ios_base::openmode which = ios_base::in | ios_base::out); // before C++20 15a11f8b1aSMarek Kurdej // basic_stringbuf() : basic_stringbuf(ios_base::in | ios_base::out) {} // C++20 16a11f8b1aSMarek 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" 22a11f8b1aSMarek Kurdej #if TEST_STD_VER >= 11 23a11f8b1aSMarek Kurdej #include "test_convertible.h" 24a11f8b1aSMarek Kurdej #endif 257fc6a556SMarshall Clow 26378ae52bSZhihao Yuan template<typename CharT> 27378ae52bSZhihao Yuan struct testbuf 28378ae52bSZhihao Yuan : std::basic_stringbuf<CharT> 29378ae52bSZhihao Yuan { checktestbuf30378ae52bSZhihao 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 main(int,char **)412df59c50SJF Bastienint main(int, char**) 425a83710eSEric Fiselier { 435a83710eSEric Fiselier { 445a83710eSEric Fiselier std::stringbuf buf; 455a83710eSEric Fiselier assert(buf.str() == ""); 465a83710eSEric Fiselier } 475a83710eSEric Fiselier { 48378ae52bSZhihao Yuan testbuf<char> buf; 49378ae52bSZhihao Yuan buf.check(); 50378ae52bSZhihao Yuan } 51*f4c1258dSLouis Dionne #ifndef TEST_HAS_NO_WIDE_CHARACTERS 52*f4c1258dSLouis Dionne { 53*f4c1258dSLouis Dionne std::wstringbuf buf; 54*f4c1258dSLouis Dionne assert(buf.str() == L""); 55*f4c1258dSLouis Dionne } 56378ae52bSZhihao Yuan { 57378ae52bSZhihao Yuan testbuf<wchar_t> buf; 58378ae52bSZhihao Yuan buf.check(); 59378ae52bSZhihao Yuan } 60*f4c1258dSLouis Dionne #endif 612df59c50SJF Bastien 62a11f8b1aSMarek Kurdej #if TEST_STD_VER >= 11 63a11f8b1aSMarek Kurdej { 64a11f8b1aSMarek Kurdej typedef std::stringbuf B; 65a11f8b1aSMarek Kurdej static_assert(test_convertible<B>(), ""); 66a11f8b1aSMarek Kurdej static_assert(!test_convertible<B, std::ios_base::openmode>(), ""); 67a11f8b1aSMarek Kurdej } 68a11f8b1aSMarek Kurdej #endif 69a11f8b1aSMarek Kurdej 702df59c50SJF Bastien return 0; 715a83710eSEric Fiselier } 72