diff options
9 files changed, 308 insertions, 156 deletions
diff --git a/libcxx/include/sstream b/libcxx/include/sstream index 6c354cf..8862e2ef 100644 --- a/libcxx/include/sstream +++ b/libcxx/include/sstream @@ -48,10 +48,12 @@ public: template <class SAlloc> explicit basic_stringbuf(const basic_string<char_type, traits_type, SAlloc>& s, ios_base::openmode which = ios_base::in | ios_base::out); // C++20 + basic_stringbuf(const basic_stringbuf&) = delete; basic_stringbuf(basic_stringbuf&& rhs); basic_stringbuf(basic_stringbuf&& rhs, const allocator_type& a); // C++20 // [stringbuf.assign] Assign and swap: + basic_stringbuf& operator=(const basic_stringbuf&) = delete; basic_stringbuf& operator=(basic_stringbuf&& rhs); void swap(basic_stringbuf& rhs) noexcept(see below); // conditionally noexcept since C++20 @@ -119,9 +121,11 @@ public: template <class SAlloc> explicit basic_istringstream(const basic_string<char_type, traits_type, SAlloc>& s, ios_base::openmode which = ios_base::in); // C++20 + basic_istringstream(const basic_istringstream&) = delete; basic_istringstream(basic_istringstream&& rhs); // [istringstream.assign] Assign and swap: + basic_istringstream& operator=(const basic_istringstream&) = delete; basic_istringstream& operator=(basic_istringstream&& rhs); void swap(basic_istringstream& rhs); @@ -178,9 +182,11 @@ public: template <class SAlloc> explicit basic_ostringstream(const basic_string<char_type, traits_type, SAlloc>& s, ios_base::openmode which = ios_base::out); // C++20 + basic_ostringstream(const basic_ostringstream&) = delete; basic_ostringstream(basic_ostringstream&& rhs); // [ostringstream.assign] Assign and swap: + basic_ostringstream& operator=(const basic_ostringstream&) = delete; basic_ostringstream& operator=(basic_ostringstream&& rhs); void swap(basic_ostringstream& rhs); @@ -237,9 +243,11 @@ public: 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(const basic_stringstream&) = delete; basic_stringstream(basic_stringstream&& rhs); // [stringstream.assign] Assign and swap: + basic_stringstream& operator=(const basic_stringstream&) = delete; basic_stringstream& operator=(basic_stringstream&& rhs); void swap(basic_stringstream& rhs); @@ -364,6 +372,7 @@ public: } #endif // _LIBCPP_STD_VER >= 20 + basic_stringbuf(const basic_stringbuf&) = delete; basic_stringbuf(basic_stringbuf&& __rhs) : __mode_(__rhs.__mode_) { __move_init(std::move(__rhs)); } #if _LIBCPP_STD_VER >= 20 @@ -374,6 +383,7 @@ public: #endif // [stringbuf.assign] Assign and swap: + basic_stringbuf& operator=(const basic_stringbuf&) = delete; basic_stringbuf& operator=(basic_stringbuf&& __rhs); void swap(basic_stringbuf& __rhs) #if _LIBCPP_STD_VER >= 20 @@ -822,12 +832,14 @@ public: : basic_istream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::in) {} #endif // _LIBCPP_STD_VER >= 20 + basic_istringstream(const basic_istringstream&) = delete; _LIBCPP_HIDE_FROM_ABI basic_istringstream(basic_istringstream&& __rhs) : basic_istream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) { basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_); } // [istringstream.assign] Assign and swap: + basic_istringstream& operator=(const basic_istringstream&) = delete; basic_istringstream& operator=(basic_istringstream&& __rhs) { basic_istream<char_type, traits_type>::operator=(std::move(__rhs)); __sb_ = std::move(__rhs.__sb_); @@ -929,12 +941,14 @@ public: : basic_ostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch | ios_base::out) {} #endif // _LIBCPP_STD_VER >= 20 + basic_ostringstream(const basic_ostringstream&) = delete; _LIBCPP_HIDE_FROM_ABI basic_ostringstream(basic_ostringstream&& __rhs) : basic_ostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) { basic_ostream<_CharT, _Traits>::set_rdbuf(&__sb_); } // [ostringstream.assign] Assign and swap: + basic_ostringstream& operator=(const basic_ostringstream&) = delete; basic_ostringstream& operator=(basic_ostringstream&& __rhs) { basic_ostream<char_type, traits_type>::operator=(std::move(__rhs)); __sb_ = std::move(__rhs.__sb_); @@ -1040,12 +1054,14 @@ public: : basic_iostream<_CharT, _Traits>(std::addressof(__sb_)), __sb_(__s, __wch) {} #endif // _LIBCPP_STD_VER >= 20 + basic_stringstream(const basic_stringstream&) = delete; _LIBCPP_HIDE_FROM_ABI basic_stringstream(basic_stringstream&& __rhs) : basic_iostream<_CharT, _Traits>(std::move(__rhs)), __sb_(std::move(__rhs.__sb_)) { basic_istream<_CharT, _Traits>::set_rdbuf(&__sb_); } // [stringstream.assign] Assign and swap: + basic_stringstream& operator=(const basic_stringstream&) = delete; basic_stringstream& operator=(basic_stringstream&& __rhs) { basic_iostream<char_type, traits_type>::operator=(std::move(__rhs)); __sb_ = std::move(__rhs.__sb_); diff --git a/libcxx/test/std/input.output/string.streams/istringstream/types.compile.pass.cpp b/libcxx/test/std/input.output/string.streams/istringstream/types.compile.pass.cpp new file mode 100644 index 0000000..7be260ff7 --- /dev/null +++ b/libcxx/test/std/input.output/string.streams/istringstream/types.compile.pass.cpp @@ -0,0 +1,75 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// <sstream> + +// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > +// class basic_istringstream +// : public basic_istream<charT, traits> +// { +// public: +// typedef charT char_type; +// typedef traits traits_type; +// typedef typename traits_type::int_type int_type; +// typedef typename traits_type::pos_type pos_type; +// typedef typename traits_type::off_type off_type; +// typedef Allocator allocator_type; +// +// basic_istringstream(const basic_istringstream&) = delete; +// basic_istringstream& operator=(const basic_istringstream&) = delete; +// +// basic_istringstream(basic_istringstream&& rhs); +// basic_istringstream& operator=(basic_istringstream&& rhs); + +#include <sstream> +#include <type_traits> + +#include "test_macros.h" + +// Types + +static_assert(std::is_base_of<std::basic_istream<char>, std::basic_istringstream<char> >::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::char_type, char>::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::traits_type, std::char_traits<char> >::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::int_type, std::char_traits<char>::int_type>::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::pos_type, std::char_traits<char>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::off_type, std::char_traits<char>::off_type>::value, ""); +static_assert(std::is_same<std::basic_istringstream<char>::allocator_type, std::allocator<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_base_of<std::basic_istream<wchar_t>, std::basic_istringstream<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::char_type, wchar_t>::value, ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::traits_type, std::char_traits<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::int_type, std::char_traits<wchar_t>::int_type>::value, + ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::pos_type, std::char_traits<wchar_t>::pos_type>::value, + ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::off_type, std::char_traits<wchar_t>::off_type>::value, + ""); +static_assert(std::is_same<std::basic_istringstream<wchar_t>::allocator_type, std::allocator<wchar_t> >::value, ""); +#endif + +// Copy properties + +static_assert(!std::is_copy_constructible<std::istringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::istringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(!std::is_copy_constructible<std::wistringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::wistringstream>::value, ""); +#endif + +// Move properties + +static_assert(std::is_move_constructible<std::istringstream>::value, ""); +static_assert(std::is_move_assignable<std::istringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_move_constructible<std::wistringstream>::value, ""); +static_assert(std::is_move_assignable<std::wistringstream>::value, ""); +#endif diff --git a/libcxx/test/std/input.output/string.streams/istringstream/types.pass.cpp b/libcxx/test/std/input.output/string.streams/istringstream/types.pass.cpp deleted file mode 100644 index da1b1de..0000000 --- a/libcxx/test/std/input.output/string.streams/istringstream/types.pass.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -// <sstream> - -// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > -// class basic_istringstream -// : public basic_istream<charT, traits> -// { -// public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef typename traits_type::int_type int_type; -// typedef typename traits_type::pos_type pos_type; -// typedef typename traits_type::off_type off_type; -// typedef Allocator allocator_type; - -#include <sstream> -#include <type_traits> - -#include "test_macros.h" - -int main(int, char**) -{ - static_assert((std::is_base_of<std::basic_istream<char>, std::basic_istringstream<char> >::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::char_type, char>::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::traits_type, std::char_traits<char> >::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::int_type, std::char_traits<char>::int_type>::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::pos_type, std::char_traits<char>::pos_type>::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::off_type, std::char_traits<char>::off_type>::value), ""); - static_assert((std::is_same<std::basic_istringstream<char>::allocator_type, std::allocator<char> >::value), ""); - - return 0; -} diff --git a/libcxx/test/std/input.output/string.streams/ostringstream/types.compile.pass.cpp b/libcxx/test/std/input.output/string.streams/ostringstream/types.compile.pass.cpp new file mode 100644 index 0000000..df712bb --- /dev/null +++ b/libcxx/test/std/input.output/string.streams/ostringstream/types.compile.pass.cpp @@ -0,0 +1,75 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// <sstream> + +// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > +// class basic_ostringstream +// : public basic_ostream<charT, traits> +// { +// public: +// typedef charT char_type; +// typedef traits traits_type; +// typedef typename traits_type::int_type int_type; +// typedef typename traits_type::pos_type pos_type; +// typedef typename traits_type::off_type off_type; +// typedef Allocator allocator_type; +// +// basic_ostringstream(const basic_ostringstream&) = delete; +// basic_ostringstream& operator=(const basic_ostringstream&) = delete; +// +// basic_ostringstream(basic_ostringstream&& rhs); +// basic_ostringstream& operator=(basic_ostringstream&& rhs); + +#include <sstream> +#include <type_traits> + +#include "test_macros.h" + +// Types + +static_assert(std::is_base_of<std::basic_ostream<char>, std::basic_ostringstream<char> >::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::char_type, char>::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::traits_type, std::char_traits<char> >::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::int_type, std::char_traits<char>::int_type>::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::pos_type, std::char_traits<char>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::off_type, std::char_traits<char>::off_type>::value, ""); +static_assert(std::is_same<std::basic_ostringstream<char>::allocator_type, std::allocator<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_base_of<std::basic_ostream<wchar_t>, std::basic_ostringstream<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::char_type, wchar_t>::value, ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::traits_type, std::char_traits<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::int_type, std::char_traits<wchar_t>::int_type>::value, + ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::pos_type, std::char_traits<wchar_t>::pos_type>::value, + ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::off_type, std::char_traits<wchar_t>::off_type>::value, + ""); +static_assert(std::is_same<std::basic_ostringstream<wchar_t>::allocator_type, std::allocator<wchar_t> >::value, ""); +#endif + +// Copy properties + +static_assert(!std::is_copy_constructible<std::ostringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::ostringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(!std::is_copy_constructible<std::wostringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::wostringstream>::value, ""); +#endif + +// Move properties + +static_assert(std::is_move_constructible<std::ostringstream>::value, ""); +static_assert(std::is_move_assignable<std::ostringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_move_constructible<std::wostringstream>::value, ""); +static_assert(std::is_move_assignable<std::wostringstream>::value, ""); +#endif diff --git a/libcxx/test/std/input.output/string.streams/ostringstream/types.pass.cpp b/libcxx/test/std/input.output/string.streams/ostringstream/types.pass.cpp deleted file mode 100644 index b294192..0000000 --- a/libcxx/test/std/input.output/string.streams/ostringstream/types.pass.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -// <sstream> - -// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > -// class basic_ostringstream -// : public basic_ostream<charT, traits> -// { -// public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef typename traits_type::int_type int_type; -// typedef typename traits_type::pos_type pos_type; -// typedef typename traits_type::off_type off_type; -// typedef Allocator allocator_type; - -#include <sstream> -#include <type_traits> - -#include "test_macros.h" - -int main(int, char**) -{ - static_assert((std::is_base_of<std::basic_ostream<char>, std::basic_ostringstream<char> >::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::char_type, char>::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::traits_type, std::char_traits<char> >::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::int_type, std::char_traits<char>::int_type>::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::pos_type, std::char_traits<char>::pos_type>::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::off_type, std::char_traits<char>::off_type>::value), ""); - static_assert((std::is_same<std::basic_ostringstream<char>::allocator_type, std::allocator<char> >::value), ""); - - return 0; -} diff --git a/libcxx/test/std/input.output/string.streams/stringbuf/types.compile.pass.cpp b/libcxx/test/std/input.output/string.streams/stringbuf/types.compile.pass.cpp new file mode 100644 index 0000000..7743d3a --- /dev/null +++ b/libcxx/test/std/input.output/string.streams/stringbuf/types.compile.pass.cpp @@ -0,0 +1,70 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// <sstream> + +// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > +// class basic_stringbuf +// : public basic_streambuf<charT, traits> +// { +// public: +// typedef charT char_type; +// typedef traits traits_type; +// typedef typename traits_type::int_type int_type; +// typedef typename traits_type::pos_type pos_type; +// typedef typename traits_type::off_type off_type; +// typedef Allocator allocator_type; +// +// basic_stringbuf(const basic_stringbuf&) = delete; +// basic_stringbuf& operator=(const basic_stringbuf&) = delete; +// +// basic_stringbuf(basic_stringbuf&& rhs); +// basic_stringbuf& operator=(basic_stringbuf&& rhs); + +#include <sstream> +#include <type_traits> + +#include "test_macros.h" + +static_assert(std::is_base_of<std::basic_streambuf<char>, std::basic_stringbuf<char> >::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::char_type, char>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::traits_type, std::char_traits<char> >::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::int_type, std::char_traits<char>::int_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::pos_type, std::char_traits<char>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::off_type, std::char_traits<char>::off_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<char>::allocator_type, std::allocator<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_base_of<std::basic_streambuf<wchar_t>, std::basic_stringbuf<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::char_type, wchar_t>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::traits_type, std::char_traits<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::int_type, std::char_traits<wchar_t>::int_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::pos_type, std::char_traits<wchar_t>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::off_type, std::char_traits<wchar_t>::off_type>::value, ""); +static_assert(std::is_same<std::basic_stringbuf<wchar_t>::allocator_type, std::allocator<wchar_t> >::value, ""); +#endif + +// Copy properties + +static_assert(!std::is_copy_constructible<std::basic_stringbuf<char> >::value, ""); +static_assert(!std::is_copy_assignable<std::basic_stringbuf<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(!std::is_copy_constructible<std::basic_stringbuf<wchar_t> >::value, ""); +static_assert(!std::is_copy_assignable<std::basic_stringbuf<wchar_t> >::value, ""); +#endif + +// Move properties + +static_assert(std::is_move_constructible<std::basic_stringbuf<char> >::value, ""); +static_assert(std::is_move_assignable<std::basic_stringbuf<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_move_constructible<std::basic_stringbuf<wchar_t> >::value, ""); +static_assert(std::is_move_assignable<std::basic_stringbuf<wchar_t> >::value, ""); +#endif diff --git a/libcxx/test/std/input.output/string.streams/stringbuf/types.pass.cpp b/libcxx/test/std/input.output/string.streams/stringbuf/types.pass.cpp deleted file mode 100644 index cec61694..0000000 --- a/libcxx/test/std/input.output/string.streams/stringbuf/types.pass.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -// <sstream> - -// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > -// class basic_stringbuf -// : public basic_streambuf<charT, traits> -// { -// public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef typename traits_type::int_type int_type; -// typedef typename traits_type::pos_type pos_type; -// typedef typename traits_type::off_type off_type; -// typedef Allocator allocator_type; - -#include <sstream> -#include <type_traits> - -#include "test_macros.h" - -int main(int, char**) -{ - static_assert((std::is_base_of<std::basic_streambuf<char>, std::basic_stringbuf<char> >::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::char_type, char>::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::traits_type, std::char_traits<char> >::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::int_type, std::char_traits<char>::int_type>::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::pos_type, std::char_traits<char>::pos_type>::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::off_type, std::char_traits<char>::off_type>::value), ""); - static_assert((std::is_same<std::basic_stringbuf<char>::allocator_type, std::allocator<char> >::value), ""); - - return 0; -} diff --git a/libcxx/test/std/input.output/string.streams/stringstream/types.compile.pass.cpp b/libcxx/test/std/input.output/string.streams/stringstream/types.compile.pass.cpp new file mode 100644 index 0000000..20486c8 --- /dev/null +++ b/libcxx/test/std/input.output/string.streams/stringstream/types.compile.pass.cpp @@ -0,0 +1,72 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// +//===----------------------------------------------------------------------===// + +// <sstream> + +// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > +// class basic_stringstream +// : public basic_iostream<charT, traits> +// { +// public: +// typedef charT char_type; +// typedef traits traits_type; +// typedef typename traits_type::int_type int_type; +// typedef typename traits_type::pos_type pos_type; +// typedef typename traits_type::off_type off_type; +// typedef Allocator allocator_type; +// +// basic_stringstream(const basic_stringstream&) = delete; +// basic_stringstream& operator=(const basic_stringstream&) = delete; +// +// basic_stringstream(basic_stringstream&& rhs); +// basic_stringstream& operator=(basic_stringstream&& rhs); + +#include <sstream> +#include <type_traits> + +#include "test_macros.h" + +// Types + +static_assert(std::is_base_of<std::basic_iostream<char>, std::basic_stringstream<char> >::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::char_type, char>::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::traits_type, std::char_traits<char> >::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::int_type, std::char_traits<char>::int_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::pos_type, std::char_traits<char>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::off_type, std::char_traits<char>::off_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<char>::allocator_type, std::allocator<char> >::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_base_of<std::basic_iostream<wchar_t>, std::basic_stringstream<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::char_type, wchar_t>::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::traits_type, std::char_traits<wchar_t> >::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::int_type, std::char_traits<wchar_t>::int_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::pos_type, std::char_traits<wchar_t>::pos_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::off_type, std::char_traits<wchar_t>::off_type>::value, ""); +static_assert(std::is_same<std::basic_stringstream<wchar_t>::allocator_type, std::allocator<wchar_t> >::value, ""); +#endif + +// Copy properties + +static_assert(!std::is_copy_constructible<std::stringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::stringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(!std::is_copy_constructible<std::wstringstream>::value, ""); +static_assert(!std::is_copy_assignable<std::wstringstream>::value, ""); +#endif + +// Move properties + +static_assert(std::is_move_constructible<std::stringstream>::value, ""); +static_assert(std::is_move_assignable<std::stringstream>::value, ""); + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS +static_assert(std::is_move_constructible<std::wstringstream>::value, ""); +static_assert(std::is_move_assignable<std::wstringstream>::value, ""); +#endif diff --git a/libcxx/test/std/input.output/string.streams/stringstream/types.pass.cpp b/libcxx/test/std/input.output/string.streams/stringstream/types.pass.cpp deleted file mode 100644 index 11990e6a..0000000 --- a/libcxx/test/std/input.output/string.streams/stringstream/types.pass.cpp +++ /dev/null @@ -1,39 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// - -// <sstream> - -// template <class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > -// class basic_stringstream -// : public basic_iostream<charT, traits> -// { -// public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef typename traits_type::int_type int_type; -// typedef typename traits_type::pos_type pos_type; -// typedef typename traits_type::off_type off_type; -// typedef Allocator allocator_type; - -#include <sstream> -#include <type_traits> - -#include "test_macros.h" - -int main(int, char**) -{ - static_assert((std::is_base_of<std::basic_iostream<char>, std::basic_stringstream<char> >::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::char_type, char>::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::traits_type, std::char_traits<char> >::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::int_type, std::char_traits<char>::int_type>::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::pos_type, std::char_traits<char>::pos_type>::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::off_type, std::char_traits<char>::off_type>::value), ""); - static_assert((std::is_same<std::basic_stringstream<char>::allocator_type, std::allocator<char> >::value), ""); - - return 0; -} |
