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 Bastien int 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