mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-07 02:43:57 +00:00
[libc++] Implement stringstream members of P0408R7 (Efficient Access to basic_stringbuf's Buffer)
Reviewed By: Mordante, #libc Differential Revision: https://reviews.llvm.org/D155359
This commit is contained in:
parent
ace9b6bbf5
commit
c7c0095b29
@ -49,7 +49,6 @@ Paper Status
|
||||
.. [#note-P0883.1] P0883: shared_ptr and floating-point changes weren't applied as they themselves aren't implemented yet.
|
||||
.. [#note-P0883.2] P0883: ``ATOMIC_FLAG_INIT`` was marked deprecated in version 14.0, but was undeprecated with the implementation of LWG3659 in version 15.0.
|
||||
.. [#note-P2231] P2231: Optional is complete. The changes to variant haven't been implemented yet.
|
||||
.. [#note-P0408] P0408: Implemented all `stringbuf`/`istringstream`/`ostringstream` members and `view()` in `stringstream`.
|
||||
.. [#note-P0660] P0660: Section 32.3 Stop Tokens is complete. ``jthread`` hasn't been implemented yet.
|
||||
|
||||
.. _issues-status-cxx20:
|
||||
|
@ -99,7 +99,7 @@
|
||||
"`P1464R1 <https://wg21.link/P1464R1>`__","LWG","Mandating the Standard Library: Clause 22 - Iterators library","Kona","|Complete|","9.0"
|
||||
"","","","","","",""
|
||||
"`P0325R4 <https://wg21.link/P0325R4>`__","LWG","to_array from LFTS with updates","Cologne","|Complete|","10.0"
|
||||
"`P0408R7 <https://wg21.link/P0408R7>`__","LWG","Efficient Access to basic_stringbuf's Buffer","Cologne","|In Progress| [#note-P0408]_",""
|
||||
"`P0408R7 <https://wg21.link/P0408R7>`__","LWG","Efficient Access to basic_stringbuf's Buffer","Cologne","|Complete|","17.0"
|
||||
"`P0466R5 <https://wg21.link/P0466R5>`__","LWG","Layout-compatibility and Pointer-interconvertibility Traits","Cologne","",""
|
||||
"`P0553R4 <https://wg21.link/P0553R4>`__","LWG","Bit operations","Cologne","|Complete|","9.0"
|
||||
"`P0631R8 <https://wg21.link/P0631R8>`__","LWG","Math Constants","Cologne","|Complete|","11.0"
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -221,9 +221,20 @@ public:
|
||||
explicit basic_stringstream(ios_base::openmode which = ios_base::out | ios_base::in); // before C++20
|
||||
basic_stringstream() : basic_stringstream(ios_base::out | ios_base::in) {} // C++20
|
||||
explicit basic_stringstream(ios_base::openmode which); // C++20
|
||||
|
||||
explicit basic_stringstream(const basic_string<char_type, traits_type, allocator_type>& str,
|
||||
ios_base::openmode which = ios_base::out|ios_base::in);
|
||||
explicit basic_stringstream(const basic_string<char_type, traits_type, allocator_type>& s,
|
||||
ios_base::openmode which = ios_base::out | ios_base::in);
|
||||
basic_stringstream(ios_base::openmode which, const allocator_type& a); // C++20
|
||||
explicit basic_stringstream(basic_string<char_type, traits_type, allocator_type>&& s,
|
||||
ios_base::openmode which = ios_base::out | ios_base::in); // C++20
|
||||
template <class SAlloc>
|
||||
basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s, const allocator_type& a)
|
||||
: basic_stringstream(s, ios_base::out | ios_base::in, a) {} // C++20
|
||||
template <class SAlloc>
|
||||
basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s,
|
||||
ios_base::openmode which, const allocator_type& a); // C++20
|
||||
template <class SAlloc>
|
||||
explicit basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s,
|
||||
ios_base::openmode which = ios_base::out | ios_base::in); // C++20
|
||||
basic_stringstream(basic_stringstream&& rhs);
|
||||
|
||||
// [stringstream.assign] Assign and swap:
|
||||
@ -232,9 +243,16 @@ public:
|
||||
|
||||
// [stringstream.members] Member functions:
|
||||
basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const;
|
||||
basic_string<char_type, traits_type, allocator_type> str() const;
|
||||
void str(const basic_string<char_type, traits_type, allocator_type>& str);
|
||||
basic_string_view<char_type, traits_type> view() const noexcept; // C++20
|
||||
basic_string<char_type, traits_type, allocator_type> str() const; // before C++20
|
||||
basic_string<char_type, traits_type, allocator_type> str() const &; // C++20
|
||||
template <class SAlloc>
|
||||
basic_string<char_type, traits_type, SAlloc> str(const SAlloc& sa) const; // C++20
|
||||
basic_string<char_type, traits_type, allocator_type> str() &&; // C++20
|
||||
basic_string_view<char_type, traits_type> view() const noexcept; // C++20
|
||||
void str(const basic_string<char_type, traits_type, allocator_type>& s);
|
||||
template <class SAlloc>
|
||||
void str(const basic_string<char_type, traits_type, SAlloc>& s); // C++20
|
||||
void str(basic_string<char_type, traits_type, allocator_type>&& s); // C++20
|
||||
};
|
||||
|
||||
template <class charT, class traits, class Allocator>
|
||||
@ -1070,6 +1088,29 @@ public:
|
||||
, __sb_(__s, __wch)
|
||||
{ }
|
||||
|
||||
#if _LIBCPP_STD_VER >= 20
|
||||
_LIBCPP_HIDE_FROM_ABI basic_stringstream(ios_base::openmode __wch, const _Allocator& __a)
|
||||
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__wch, __a) {}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(string_type&& __s, ios_base::openmode __wch = ios_base::out | ios_base::in)
|
||||
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(std::move(__s), __wch) {}
|
||||
|
||||
template <class _SAlloc>
|
||||
_LIBCPP_HIDE_FROM_ABI basic_stringstream(const basic_string<_CharT, _Traits, _SAlloc>& __s, const _Allocator& __a)
|
||||
: basic_stringstream(__s, ios_base::out | ios_base::in, __a) {}
|
||||
|
||||
template <class _SAlloc>
|
||||
_LIBCPP_HIDE_FROM_ABI basic_stringstream(
|
||||
const basic_string<_CharT, _Traits, _SAlloc>& __s, ios_base::openmode __wch, const _Allocator& __a)
|
||||
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch, __a) {}
|
||||
|
||||
template <class _SAlloc>
|
||||
requires (!is_same_v<_SAlloc, allocator_type>)
|
||||
_LIBCPP_HIDE_FROM_ABI explicit basic_stringstream(const basic_string<_CharT, _Traits, _SAlloc>& __s,
|
||||
ios_base::openmode __wch = ios_base::out | ios_base::in)
|
||||
: basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch) {}
|
||||
#endif // _LIBCPP_STD_VER >= 20
|
||||
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
basic_stringstream(basic_stringstream&& __rhs)
|
||||
: basic_iostream<_CharT, _Traits>(_VSTD::move(__rhs))
|
||||
@ -1095,20 +1136,33 @@ public:
|
||||
basic_stringbuf<char_type, traits_type, allocator_type>* rdbuf() const {
|
||||
return const_cast<basic_stringbuf<char_type, traits_type, allocator_type>*>(&__sb_);
|
||||
}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
string_type str() const {
|
||||
return __sb_.str();
|
||||
|
||||
#if _LIBCPP_STD_VER >= 20
|
||||
_LIBCPP_HIDE_FROM_ABI string_type str() const & { return __sb_.str(); }
|
||||
|
||||
template <class _SAlloc>
|
||||
requires __is_allocator<_SAlloc>::value
|
||||
_LIBCPP_HIDE_FROM_ABI basic_string<char_type, traits_type, _SAlloc> str(const _SAlloc& __sa) const {
|
||||
return __sb_.str(__sa);
|
||||
}
|
||||
_LIBCPP_INLINE_VISIBILITY
|
||||
void str(const string_type& __s) {
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI string_type str() && { return std::move(__sb_).str(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI basic_string_view<char_type, traits_type> view() const noexcept { return __sb_.view(); }
|
||||
#else // _LIBCPP_STD_VER >= 20
|
||||
_LIBCPP_HIDE_FROM_ABI string_type str() const { return __sb_.str(); }
|
||||
#endif // _LIBCPP_STD_VER >= 20
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void str(const string_type& __s) { __sb_.str(__s); }
|
||||
|
||||
#if _LIBCPP_STD_VER >= 20
|
||||
template <class _SAlloc>
|
||||
_LIBCPP_HIDE_FROM_ABI void str(const basic_string<char_type, traits_type, _SAlloc>& __s) {
|
||||
__sb_.str(__s);
|
||||
}
|
||||
#if _LIBCPP_STD_VER >= 20
|
||||
_LIBCPP_HIDE_FROM_ABI
|
||||
basic_string_view<char_type, traits_type> view() const noexcept {
|
||||
return __sb_.view();
|
||||
}
|
||||
#endif
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void str(string_type&& __s) { __sb_.str(std::move(__s)); }
|
||||
#endif // _LIBCPP_STD_VER >= 20
|
||||
};
|
||||
|
||||
template <class _CharT, class _Traits, class _Allocator>
|
||||
|
@ -0,0 +1,38 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// basic_stringstream(ios_base::openmode which, const Allocator& a);
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
const test_allocator<CharT> a(2);
|
||||
const std::basic_stringstream<CharT, std::char_traits<CharT>, test_allocator<CharT>> ss(std::ios_base::in, a);
|
||||
assert(ss.rdbuf()->get_allocator() == a);
|
||||
assert(ss.view().empty());
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// template <class SAlloc>
|
||||
// explicit basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s, ios_base::openmode which = ios_base::out | ios_base::in)
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
#define SV(S) MAKE_STRING_VIEW(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
{
|
||||
const std::basic_string<CharT> s(STR("testing"));
|
||||
const std::basic_stringstream<CharT, std::char_traits<CharT>, test_allocator<CharT>> ss(s);
|
||||
assert(ss.view() == SV("testing"));
|
||||
}
|
||||
{
|
||||
const std::basic_string<CharT> s(STR("testing"));
|
||||
const std::basic_stringstream<CharT, std::char_traits<CharT>, test_allocator<CharT>> ss(s, std::ios_base::in);
|
||||
assert(ss.view() == SV("testing"));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// template <class SAlloc>
|
||||
// basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s, const Allocator& a)
|
||||
// : basic_stringstream(s, ios_base::out | ios_base::in, a) {}
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
#define SV(S) MAKE_STRING_VIEW(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
const std::basic_string<CharT> s(STR("testing"));
|
||||
const test_allocator<CharT> a(2);
|
||||
const std::basic_stringstream<CharT, std::char_traits<CharT>, test_allocator<CharT>> ss(s, a);
|
||||
assert(ss.rdbuf()->get_allocator() == a);
|
||||
assert(ss.view() == SV("testing"));
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// template <class SAlloc>
|
||||
// basic_stringstream(const basic_string<char_type, traits_type, SAlloc>& s, ios_base::openmode which, const Allocator& a)
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
#define SV(S) MAKE_STRING_VIEW(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
const std::basic_string<CharT> s(STR("testing"));
|
||||
const test_allocator<CharT> a(2);
|
||||
const std::basic_stringstream<CharT, std::char_traits<CharT>, test_allocator<CharT>> ss(s, std::ios_base::out, a);
|
||||
assert(ss.rdbuf()->get_allocator() == a);
|
||||
assert(ss.view() == SV("testing"));
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// explicit basic_stringstream(basic_string<char_type, traits_type, allocator_type>&& s, ios_base::openmode which = ios_base::out | ios_base::in);
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
{
|
||||
std::basic_string<CharT> s(STR("testing"));
|
||||
const std::basic_stringstream<CharT> ss(std::move(s));
|
||||
assert(ss.str() == STR("testing"));
|
||||
}
|
||||
{
|
||||
std::basic_string<CharT> s(STR("testing"));
|
||||
const std::basic_stringstream<CharT> ss(std::move(s), std::ios_base::out);
|
||||
assert(ss.str() == STR("testing"));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// template <class SAlloc>
|
||||
// basic_string<charT, traits, SAlloc> str(const SAlloc& sa) const;
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
#define SV(S) MAKE_STRING_VIEW(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
const std::basic_stringstream<CharT> ss(STR("testing"));
|
||||
const test_allocator<CharT> a(1);
|
||||
const std::basic_string<CharT, std::char_traits<CharT>, test_allocator<CharT>> s = ss.str(a);
|
||||
assert(s == SV("testing"));
|
||||
assert(s.get_allocator() == a);
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// basic_string<charT, traits, Allocator> str() &&;
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
{
|
||||
std::basic_stringstream<CharT> ss(STR("testing"));
|
||||
std::basic_string<CharT> s = std::move(ss).str();
|
||||
assert(s == STR("testing"));
|
||||
assert(ss.view().empty());
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// template <class SAlloc>
|
||||
// void str(const basic_string<charT, traits, SAlloc>& s);
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_allocator.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
{
|
||||
const test_allocator<CharT> a(6);
|
||||
const std::basic_string<CharT, std::char_traits<CharT>, test_allocator<CharT>> s(STR("testing"), a);
|
||||
std::basic_stringstream<CharT> ss;
|
||||
ss.str(s);
|
||||
assert(ss.str() == STR("testing"));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// UNSUPPORTED: c++03, c++11, c++14, c++17
|
||||
|
||||
// <sstream>
|
||||
|
||||
// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT>>
|
||||
// class basic_stringstream
|
||||
|
||||
// void str(basic_string<charT, traits, Allocator>&& s);
|
||||
|
||||
#include <sstream>
|
||||
#include <cassert>
|
||||
|
||||
#include "make_string.h"
|
||||
#include "test_macros.h"
|
||||
|
||||
#define STR(S) MAKE_STRING(CharT, S)
|
||||
|
||||
template <class CharT>
|
||||
static void test() {
|
||||
{
|
||||
std::basic_stringstream<CharT> ss;
|
||||
std::basic_string<CharT> s(STR("testing"));
|
||||
ss.str(std::move(s));
|
||||
assert(ss.str() == STR("testing"));
|
||||
}
|
||||
}
|
||||
|
||||
int main(int, char**) {
|
||||
test<char>();
|
||||
#ifndef TEST_HAS_NO_WIDE_CHARACTERS
|
||||
test<wchar_t>();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user