diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/back_insert_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/back_insert_iterator.h index a977729934f..184ac24c10a 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/back_insert_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/back_insert_iterator.h @@ -35,31 +35,39 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_PUSH template class _LIBCUDACXX_TEMPLATE_VIS back_insert_iterator #if _LIBCUDACXX_STD_VER <= 14 || !defined(_LIBCUDACXX_ABI_NO_ITERATOR_BASES) - : public iterator + : public iterator #endif { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP protected: _Container* container; public: + typedef output_iterator_tag iterator_category; + typedef void value_type; +#if _LIBCUDACXX_STD_VER > 17 + typedef ptrdiff_t difference_type; +#else + typedef void difference_type; +#endif + typedef void pointer; + typedef void reference; typedef _Container container_type; - _LIBCUDACXX_INLINE_VISIBILITY explicit back_insert_iterator(_Container& __x) : container(_CUDA_VSTD::addressof(__x)) {} - _LIBCUDACXX_INLINE_VISIBILITY back_insert_iterator& operator=(const typename _Container::value_type& __value_) - {container->push_back(__value_); return *this;} - _LIBCUDACXX_INLINE_VISIBILITY back_insert_iterator& operator=(typename _Container::value_type&& __value_) - {container->push_back(_CUDA_VSTD::move(__value_)); return *this;} - _LIBCUDACXX_INLINE_VISIBILITY back_insert_iterator& operator*() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY back_insert_iterator& operator++() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY back_insert_iterator operator++(int) {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 explicit back_insert_iterator(_Container& __x) : container(_CUDA_VSTD::addressof(__x)) {} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator=(const typename _Container::value_type& __value) + {container->push_back(__value); return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator=(typename _Container::value_type&& __value) + {container->push_back(_CUDA_VSTD::move(__value)); return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator*() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator& operator++() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator operator++(int) {return *this;} + + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 _Container* __get_container() const { return container; } }; +_LIBCUDACXX_CTAD_SUPPORTED_FOR_TYPE(back_insert_iterator); template -inline _LIBCUDACXX_INLINE_VISIBILITY +inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 back_insert_iterator<_Container> back_inserter(_Container& __x) { diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/front_insert_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/front_insert_iterator.h index aef0098a4e5..192d9b44396 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/front_insert_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/front_insert_iterator.h @@ -15,8 +15,8 @@ #include <__config> #endif // __cuda_std__ -#include "../__iterator/iterator.h" #include "../__iterator/iterator_traits.h" +#include "../__iterator/iterator.h" #include "../__memory/addressof.h" #include "../__utility/move.h" #include "../cstddef" @@ -35,31 +35,37 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_PUSH template class _LIBCUDACXX_TEMPLATE_VIS front_insert_iterator #if _LIBCUDACXX_STD_VER <= 14 || !defined(_LIBCUDACXX_ABI_NO_ITERATOR_BASES) - : public iterator + : public iterator #endif { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP protected: _Container* container; public: + typedef output_iterator_tag iterator_category; + typedef void value_type; +#if _LIBCUDACXX_STD_VER > 17 + typedef ptrdiff_t difference_type; +#else + typedef void difference_type; +#endif + typedef void pointer; + typedef void reference; typedef _Container container_type; - _LIBCUDACXX_INLINE_VISIBILITY explicit front_insert_iterator(_Container& __x) : container(_CUDA_VSTD::addressof(__x)) {} - _LIBCUDACXX_INLINE_VISIBILITY front_insert_iterator& operator=(const typename _Container::value_type& __value_) - {container->push_front(__value_); return *this;} - _LIBCUDACXX_INLINE_VISIBILITY front_insert_iterator& operator=(typename _Container::value_type&& __value_) - {container->push_front(_CUDA_VSTD::move(__value_)); return *this;} - _LIBCUDACXX_INLINE_VISIBILITY front_insert_iterator& operator*() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY front_insert_iterator& operator++() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY front_insert_iterator operator++(int) {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 explicit front_insert_iterator(_Container& __x) : container(_CUDA_VSTD::addressof(__x)) {} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator& operator=(const typename _Container::value_type& __value) + {container->push_front(__value); return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator& operator=(typename _Container::value_type&& __value) + {container->push_front(_CUDA_VSTD::move(__value)); return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator& operator*() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator& operator++() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator operator++(int) {return *this;} }; +_LIBCUDACXX_CTAD_SUPPORTED_FOR_TYPE(front_insert_iterator); template -inline _LIBCUDACXX_INLINE_VISIBILITY +inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 front_insert_iterator<_Container> front_inserter(_Container& __x) { diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/insert_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/insert_iterator.h index 50ccebf31a9..bf5f7485f86 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/insert_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/insert_iterator.h @@ -31,39 +31,47 @@ _LIBCUDACXX_BEGIN_NAMESPACE_STD +template +using __insert_iterator_iter_t = typename _Container::iterator; + _LIBCUDACXX_SUPPRESS_DEPRECATED_PUSH template class _LIBCUDACXX_TEMPLATE_VIS insert_iterator #if _LIBCUDACXX_STD_VER <= 14 || !defined(_LIBCUDACXX_ABI_NO_ITERATOR_BASES) - : public iterator + : public iterator #endif { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP protected: _Container* container; - typename _Container::iterator iter; + __insert_iterator_iter_t<_Container> iter; public: + typedef output_iterator_tag iterator_category; + typedef void value_type; +#if _LIBCUDACXX_STD_VER > 17 + typedef ptrdiff_t difference_type; +#else + typedef void difference_type; +#endif + typedef void pointer; + typedef void reference; typedef _Container container_type; - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator(_Container& __x, typename _Container::iterator __i) + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator(_Container& __x, __insert_iterator_iter_t<_Container> __i) : container(_CUDA_VSTD::addressof(__x)), iter(__i) {} - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator& operator=(const typename _Container::value_type& __value_) - {iter = container->insert(iter, __value_); ++iter; return *this;} - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator& operator=(typename _Container::value_type&& __value_) - {iter = container->insert(iter, _CUDA_VSTD::move(__value_)); ++iter; return *this;} - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator& operator*() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator& operator++() {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY insert_iterator& operator++(int) {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator& operator=(const typename _Container::value_type& __value) + {iter = container->insert(iter, __value); ++iter; return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator& operator=(typename _Container::value_type&& __value) + {iter = container->insert(iter, _CUDA_VSTD::move(__value)); ++iter; return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator& operator*() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator& operator++() {return *this;} + _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator& operator++(int) {return *this;} }; template -inline _LIBCUDACXX_INLINE_VISIBILITY +inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX17 insert_iterator<_Container> -inserter(_Container& __x, typename _Container::iterator __i) +inserter(_Container& __x, __insert_iterator_iter_t<_Container> __i) { return insert_iterator<_Container>(__x, __i); } diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istream_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istream_iterator.h index adf07bcc0a0..7deb411f63f 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istream_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istream_iterator.h @@ -15,6 +15,8 @@ #include <__config> #endif // __cuda_std__ +#include "../__iterator/default_sentinel.h" +#include "../__iterator/iterator_traits.h" #include "../__iterator/iterator.h" #include "../__memory/addressof.h" #include "../cstddef" @@ -40,6 +42,11 @@ class _LIBCUDACXX_TEMPLATE_VIS istream_iterator { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP public: + typedef input_iterator_tag iterator_category; + typedef _Tp value_type; + typedef _Distance difference_type; + typedef const _Tp* pointer; + typedef const _Tp& reference; typedef _CharT char_type; typedef _Traits traits_type; typedef basic_istream<_CharT,_Traits> istream_type; @@ -47,11 +54,14 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP istream_type* __in_stream_; _Tp __value_; public: - _LIBCUDACXX_INLINE_VISIBILITY constexpr istream_iterator() : __in_stream_(0), __value_() {} + _LIBCUDACXX_INLINE_VISIBILITY constexpr istream_iterator() : __in_stream_(nullptr), __value_() {} +#if _LIBCUDACXX_STD_VER > 14 + _LIBCUDACXX_INLINE_VISIBILITY constexpr istream_iterator(default_sentinel_t) : istream_iterator() {} +#endif // _LIBCUDACXX_STD_VER > 14 _LIBCUDACXX_INLINE_VISIBILITY istream_iterator(istream_type& __s) : __in_stream_(_CUDA_VSTD::addressof(__s)) { if (!(*__in_stream_ >> __value_)) - __in_stream_ = 0; + __in_stream_ = nullptr; } _LIBCUDACXX_INLINE_VISIBILITY const _Tp& operator*() const {return __value_;} @@ -59,7 +69,7 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP _LIBCUDACXX_INLINE_VISIBILITY istream_iterator& operator++() { if (!(*__in_stream_ >> __value_)) - __in_stream_ = 0; + __in_stream_ = nullptr; return *this; } _LIBCUDACXX_INLINE_VISIBILITY istream_iterator operator++(int) @@ -71,11 +81,22 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP operator==(const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __x, const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __y); - template - friend _LIBCUDACXX_INLINE_VISIBILITY - bool - operator==(const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __x, - const istream_iterator<_Up, _CharU, _TraitsU, _DistanceU>& __y); +#if _LIBCUDACXX_STD_VER > 14 + friend _LIBCUDACXX_INLINE_VISIBILITY bool operator==(const istream_iterator& __i, default_sentinel_t) { + return __i.__in_stream_ == nullptr; + } +#if _LIBCUDACXX_STD_VER < 20 + friend _LIBCUDACXX_INLINE_VISIBILITY bool operator==(default_sentinel_t, const istream_iterator& __i) { + return __i.__in_stream_ == nullptr; + } + friend _LIBCUDACXX_INLINE_VISIBILITY bool operator!=(const istream_iterator& __i, default_sentinel_t) { + return __i.__in_stream_ != nullptr; + } + friend _LIBCUDACXX_INLINE_VISIBILITY bool operator!=(default_sentinel_t, const istream_iterator& __i) { + return __i.__in_stream_ != nullptr; + } +#endif // _LIBCUDACXX_STD_VER < 20 +#endif // _LIBCUDACXX_STD_VER > 14 }; template diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istreambuf_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istreambuf_iterator.h index 9dbbc64e18f..21ef2ccb576 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istreambuf_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/istreambuf_iterator.h @@ -15,8 +15,9 @@ #include <__config> #endif //__cuda_std__ -#include "../__iterator/iterator.h" +#include "../__iterator/default_sentinel.h" #include "../__iterator/iterator_traits.h" +#include "../__iterator/iterator.h" #include "../iosfwd" #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC) @@ -40,6 +41,11 @@ class _LIBCUDACXX_TEMPLATE_VIS istreambuf_iterator { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP public: + typedef input_iterator_tag iterator_category; + typedef _CharT value_type; + typedef typename _Traits::off_type difference_type; + typedef _CharT* pointer; + typedef _CharT reference; typedef _CharT char_type; typedef _Traits traits_type; typedef typename _Traits::int_type int_type; @@ -52,7 +58,8 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP { char_type __keep_; streambuf_type* __sbuf_; - _LIBCUDACXX_INLINE_VISIBILITY __proxy(char_type __c, streambuf_type* __s) + _LIBCUDACXX_INLINE_VISIBILITY + explicit __proxy(char_type __c, streambuf_type* __s) : __keep_(__c), __sbuf_(__s) {} friend class istreambuf_iterator; public: @@ -63,11 +70,15 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP bool __test_for_eof() const { if (__sbuf_ && traits_type::eq_int_type(__sbuf_->sgetc(), traits_type::eof())) - __sbuf_ = 0; - return __sbuf_ == 0; + __sbuf_ = nullptr; + return __sbuf_ == nullptr; } public: - _LIBCUDACXX_INLINE_VISIBILITY constexpr istreambuf_iterator() noexcept : __sbuf_(0) {} + _LIBCUDACXX_INLINE_VISIBILITY constexpr istreambuf_iterator() noexcept : __sbuf_(nullptr) {} +#if _LIBCUDACXX_STD_VER > 17 + _LIBCUDACXX_INLINE_VISIBILITY constexpr istreambuf_iterator(default_sentinel_t) noexcept + : istreambuf_iterator() {} +#endif // _LIBCUDACXX_STD_VER > 17 _LIBCUDACXX_INLINE_VISIBILITY istreambuf_iterator(istream_type& __s) noexcept : __sbuf_(__s.rdbuf()) {} _LIBCUDACXX_INLINE_VISIBILITY istreambuf_iterator(streambuf_type* __s) noexcept @@ -89,6 +100,23 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP _LIBCUDACXX_INLINE_VISIBILITY bool equal(const istreambuf_iterator& __b) const {return __test_for_eof() == __b.__test_for_eof();} + +#if _LIBCUDACXX_STD_VER > 14 + friend _LIBCUDACXX_HIDE_FROM_ABI bool operator==(const istreambuf_iterator& __i, default_sentinel_t) { + return __i.__test_for_eof(); + } +#if _LIBCUDACXX_STD_VER < 20 + friend _LIBCUDACXX_HIDE_FROM_ABI bool operator==(default_sentinel_t, const istreambuf_iterator& __i) { + return __i.__test_for_eof(); + } + friend _LIBCUDACXX_HIDE_FROM_ABI bool operator!=(const istreambuf_iterator& __i, default_sentinel_t) { + return !__i.__test_for_eof(); + } + friend _LIBCUDACXX_HIDE_FROM_ABI bool operator!=(default_sentinel_t, const istreambuf_iterator& __i) { + return !__i.__test_for_eof(); + } +#endif // _LIBCUDACXX_STD_VER < 20 +#endif // _LIBCUDACXX_STD_VER > 14 }; template @@ -97,11 +125,13 @@ bool operator==(const istreambuf_iterator<_CharT,_Traits>& __a, const istreambuf_iterator<_CharT,_Traits>& __b) {return __a.equal(__b);} +#if _LIBCUDACXX_STD_VER <= 17 template inline _LIBCUDACXX_INLINE_VISIBILITY bool operator!=(const istreambuf_iterator<_CharT,_Traits>& __a, const istreambuf_iterator<_CharT,_Traits>& __b) {return !__a.equal(__b);} +#endif // _LIBCUDACXX_STD_VER <= 17 _LIBCUDACXX_END_NAMESPACE_STD diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostream_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostream_iterator.h index a13650fee5a..5d1632c2580 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostream_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostream_iterator.h @@ -40,20 +40,30 @@ class _LIBCUDACXX_TEMPLATE_VIS ostream_iterator { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP public: - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_ostream<_CharT,_Traits> ostream_type; + typedef output_iterator_tag iterator_category; + typedef void value_type; +#if _LIBCUDACXX_STD_VER > 17 + typedef ptrdiff_t difference_type; +#else + typedef void difference_type; +#endif + typedef void pointer; + typedef void reference; + typedef _CharT char_type; + typedef _Traits traits_type; + typedef basic_ostream<_CharT, _Traits> ostream_type; + private: ostream_type* __out_stream_; const char_type* __delim_; public: _LIBCUDACXX_INLINE_VISIBILITY ostream_iterator(ostream_type& __s) noexcept - : __out_stream_(_CUDA_VSTD::addressof(__s)), __delim_(0) {} + : __out_stream_(_CUDA_VSTD::addressof(__s)), __delim_(nullptr) {} _LIBCUDACXX_INLINE_VISIBILITY ostream_iterator(ostream_type& __s, const _CharT* __delimiter) noexcept : __out_stream_(_CUDA_VSTD::addressof(__s)), __delim_(__delimiter) {} - _LIBCUDACXX_INLINE_VISIBILITY ostream_iterator& operator=(const _Tp& __value_) + _LIBCUDACXX_INLINE_VISIBILITY ostream_iterator& operator=(const _Tp& __value) { - *__out_stream_ << __value_; + *__out_stream_ << __value; if (__delim_) *__out_stream_ << __delim_; return *this; diff --git a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostreambuf_iterator.h b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostreambuf_iterator.h index 48bc890d843..da9b322508e 100644 --- a/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostreambuf_iterator.h +++ b/libcudacxx/include/cuda/std/detail/libcxx/include/__iterator/ostreambuf_iterator.h @@ -15,8 +15,8 @@ #include <__config> #endif // __cuda_std__ -#include "../__iterator/iterator.h" #include "../__iterator/iterator_traits.h" +#include "../__iterator/iterator.h" #include "../cstddef" #include "../iosfwd" @@ -39,10 +39,20 @@ class _LIBCUDACXX_TEMPLATE_VIS ostreambuf_iterator { _LIBCUDACXX_SUPPRESS_DEPRECATED_POP public: - typedef _CharT char_type; - typedef _Traits traits_type; - typedef basic_streambuf<_CharT,_Traits> streambuf_type; - typedef basic_ostream<_CharT,_Traits> ostream_type; + typedef output_iterator_tag iterator_category; + typedef void value_type; +#if _LIBCUDACXX_STD_VER > 17 + typedef ptrdiff_t difference_type; +#else + typedef void difference_type; +#endif + typedef void pointer; + typedef void reference; + typedef _CharT char_type; + typedef _Traits traits_type; + typedef basic_streambuf<_CharT, _Traits> streambuf_type; + typedef basic_ostream<_CharT, _Traits> ostream_type; + private: streambuf_type* __sbuf_; public: @@ -53,17 +63,17 @@ _LIBCUDACXX_SUPPRESS_DEPRECATED_POP _LIBCUDACXX_INLINE_VISIBILITY ostreambuf_iterator& operator=(_CharT __c) { if (__sbuf_ && traits_type::eq_int_type(__sbuf_->sputc(__c), traits_type::eof())) - __sbuf_ = 0; + __sbuf_ = nullptr; return *this; } _LIBCUDACXX_INLINE_VISIBILITY ostreambuf_iterator& operator*() {return *this;} _LIBCUDACXX_INLINE_VISIBILITY ostreambuf_iterator& operator++() {return *this;} _LIBCUDACXX_INLINE_VISIBILITY ostreambuf_iterator& operator++(int) {return *this;} - _LIBCUDACXX_INLINE_VISIBILITY bool failed() const noexcept {return __sbuf_ == 0;} + _LIBCUDACXX_INLINE_VISIBILITY bool failed() const noexcept {return __sbuf_ == nullptr;} template friend - _LIBCUDACXX_HIDDEN _LIBCUDACXX_HOST_DEVICE + _LIBCUDACXX_HIDE_FROM_ABI _LIBCUDACXX_INLINE_VISIBILITY ostreambuf_iterator<_Ch, _Tr> __pad_and_output(ostreambuf_iterator<_Ch, _Tr> __s, const _Ch* __ob, const _Ch* __op, const _Ch* __oe, diff --git a/libcudacxx/libcxx/test/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp b/libcudacxx/libcxx/test/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp new file mode 100644 index 00000000000..097801d0271 --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp @@ -0,0 +1,15 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// std::iterator + +#include + +std::iterator it; // expected-warning-re {{'iterator<{{.+}}>' is deprecated}} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/implicit_ctad.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/implicit_ctad.pass.cpp new file mode 100644 index 00000000000..10729e0029d --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/implicit_ctad.pass.cpp @@ -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++98, c++03, c++11, c++14 + +// + +// back_insert_iterator + +// Make sure that the implicitly-generated CTAD works. + +#include +#include +#include + +#include "test_macros.h" + +int main(int, char**) { + { + std::string s; + std::back_insert_iterator it(s); + ASSERT_SAME_TYPE(decltype(it), std::back_insert_iterator); + } + { + std::vector v; + std::back_insert_iterator it(v); + std::back_insert_iterator copy(it); + ASSERT_SAME_TYPE(decltype(it), std::back_insert_iterator>); + ASSERT_SAME_TYPE(decltype(copy), std::back_insert_iterator>); + } + + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..0d863e96ef3 --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,34 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// back_insert_iterator + +#include + +#include + +using iterator = std::back_insert_iterator >; +static_assert(!std::indirectly_readable); +static_assert(std::indirectly_writable); +static_assert(std::weakly_incrementable); +static_assert(std::input_or_output_iterator); +static_assert(!std::sentinel_for); +static_assert(!std::sized_sentinel_for); +static_assert(!std::input_iterator); +static_assert(std::indirectly_movable); +static_assert(std::indirectly_movable_storable); +static_assert(std::indirectly_copyable); +static_assert(std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp index e1cc4974c66..f71ba368ab8 100644 --- a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/back.insert.iterator/types.pass.cpp @@ -8,20 +8,24 @@ // -// back_insert_iterator +// front_insert_iterator // Test nested types and data member: -// template -// class back_insert_iterator { +// template +// class front_insert_iterator +// : public iterator // until C++17 +// { // protected: -// Cont* container; +// Container* container; // public: -// typedef Cont container_type; +// typedef Container container_type; // typedef void value_type; -// typedef void difference_type; +// typedef void difference_type; // until C++20 +// typedef ptrdiff_t difference_type; // since C++20 // typedef void reference; // typedef void pointer; +// typedef output_iterator_tag iterator_category; // }; #include @@ -32,9 +36,9 @@ template struct find_container - : private std::back_insert_iterator + : private std::front_insert_iterator { - explicit find_container(C& c) : std::back_insert_iterator(c) {} + explicit find_container(C& c) : std::front_insert_iterator(c) {} void test() {this->container = 0;} }; @@ -42,16 +46,25 @@ template void test() { - typedef std::back_insert_iterator R; + typedef std::front_insert_iterator R; C c; find_container q(c); q.test(); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER > 17 + static_assert((std::is_same::value), ""); +#else static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); + +#if TEST_STD_VER <= 14 + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif } int main(int, char**) diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/implicit_ctad.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/implicit_ctad.pass.cpp new file mode 100644 index 00000000000..f91d472e9ea --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/implicit_ctad.pass.cpp @@ -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++98, c++03, c++11, c++14 + +// + +// front_insert_iterator + +// Make sure that the implicitly-generated CTAD works. + +#include +#include +#include + +#include "test_macros.h" + +int main(int, char**) { + { + std::string s; + std::front_insert_iterator it(s); + ASSERT_SAME_TYPE(decltype(it), std::front_insert_iterator); + } + { + std::deque v; + std::front_insert_iterator it(v); + std::front_insert_iterator copy(it); + ASSERT_SAME_TYPE(decltype(it), std::front_insert_iterator>); + ASSERT_SAME_TYPE(decltype(copy), std::front_insert_iterator>); + } + + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..d803cb57db2 --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,34 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// front_insert_iterator + +#include + +#include + +using iterator = std::front_insert_iterator >; +static_assert(!std::indirectly_readable); +static_assert(std::indirectly_writable); +static_assert(std::weakly_incrementable); +static_assert(std::input_or_output_iterator); +static_assert(!std::sentinel_for); +static_assert(!std::sized_sentinel_for); +static_assert(!std::input_iterator); +static_assert(std::indirectly_movable); +static_assert(std::indirectly_movable_storable); +static_assert(std::indirectly_copyable); +static_assert(std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp index 97139ae2acb..f71ba368ab8 100644 --- a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/front.insert.iterator/types.pass.cpp @@ -13,13 +13,16 @@ // Test nested types and data member: // template -// class front_insert_iterator { +// class front_insert_iterator +// : public iterator // until C++17 +// { // protected: // Container* container; // public: // typedef Container container_type; // typedef void value_type; -// typedef void difference_type; +// typedef void difference_type; // until C++20 +// typedef ptrdiff_t difference_type; // since C++20 // typedef void reference; // typedef void pointer; // typedef output_iterator_tag iterator_category; @@ -49,10 +52,19 @@ test() q.test(); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER > 17 + static_assert((std::is_same::value), ""); +#else static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); + +#if TEST_STD_VER <= 14 + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif } int main(int, char**) diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/cxx20_iter_member.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/cxx20_iter_member.pass.cpp new file mode 100644 index 00000000000..5cbbfd7ac6a --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/cxx20_iter_member.pass.cpp @@ -0,0 +1,63 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// XFAIL: c++20 + +// insert_iterator +// C++20 and above use ranges::iterator_t instead of Container::iterator. + +#include + +#include +#include + +#include "test_macros.h" + +struct NoIteratorAlias { + double data_[3] = {}; + double *begin(); + + struct value_type { + constexpr value_type(double d) : x(static_cast(d)) {} + constexpr operator double() const { return x; } + + int x; + }; + + template + constexpr double *insert(double *pos, T value) { + static_assert(std::is_same_v); + *pos = value; + return pos; + } +}; + +static_assert(std::is_constructible_v, NoIteratorAlias&, double*>); +static_assert( + !std::is_constructible_v, NoIteratorAlias&, NoIteratorAlias::value_type*>); + +constexpr bool test() { + NoIteratorAlias c; + double half = 0.5; + auto it = std::insert_iterator(c, c.data_); + ASSERT_SAME_TYPE(decltype(std::inserter(c, c.data_)), std::insert_iterator); + *it++ = 1 + half; // test that RHS is still implicitly converted to _Container::value_type + *it++ = 2 + half; + assert(c.data_[0] == 1.0); + assert(c.data_[1] == 2.0); + assert(c.data_[2] == 0.0); + return true; +} + +int main(int, char**) { + test(); + static_assert(test()); + + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..f1174c18fbb --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,33 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// insert_iterator + +#include + +#include + +using iterator = std::insert_iterator >; +static_assert(!std::indirectly_readable); +static_assert(std::indirectly_writable); +static_assert(std::weakly_incrementable); +static_assert(std::input_or_output_iterator); +static_assert(!std::sentinel_for); +static_assert(!std::input_iterator); +static_assert(std::indirectly_movable); +static_assert(std::indirectly_movable_storable); +static_assert(std::indirectly_copyable); +static_assert(std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp index 1e199b3051b..08864868342 100644 --- a/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp +++ b/libcudacxx/libcxx/test/std/iterators/predef.iterators/insert.iterators/insert.iterator/types.pass.cpp @@ -13,14 +13,17 @@ // Test nested types and data members: // template -// class insert_iterator { +// class insert_iterator +// : public iterator // until C++17 +// { // protected: // Cont* container; // Cont::iterator iter; // public: // typedef Cont container_type; // typedef void value_type; -// typedef void difference_type; +// typedef void difference_type; // until C++20 +// typedef ptrdiff_t difference_type; // since C++20 // typedef void reference; // typedef void pointer; // }; @@ -52,10 +55,19 @@ test() q.test(); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER > 17 + static_assert((std::is_same::value), ""); +#else static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); + +#if TEST_STD_VER <= 14 + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif } int main(int, char**) diff --git a/libcudacxx/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..e9e1c01d1e8 --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/stream.iterators/istream.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,34 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// istream_iterator + +#include + +#include + +using iterator = std::istream_iterator; +static_assert(std::indirectly_readable); +static_assert(!std::indirectly_writable); +static_assert(std::incrementable); +static_assert(std::input_or_output_iterator); +static_assert(std::sentinel_for); +static_assert(!std::sized_sentinel_for); +static_assert(std::input_iterator); +static_assert(!std::indirectly_movable); +static_assert(!std::indirectly_movable_storable); +static_assert(!std::indirectly_copyable); +static_assert(!std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..3062c8c7e9e --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,34 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// ostream_iterator + +#include + +#include + +using iterator = std::ostream_iterator; +static_assert(!std::indirectly_readable); +static_assert(std::indirectly_writable); +static_assert(std::weakly_incrementable); +static_assert(std::input_or_output_iterator); +static_assert(!std::sentinel_for); +static_assert(!std::sized_sentinel_for); +static_assert(!std::input_iterator); +static_assert(std::indirectly_movable); +static_assert(std::indirectly_movable_storable); +static_assert(std::indirectly_copyable); +static_assert(std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp index 950c7dfe8c0..b2f5b8c6354 100644 --- a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp +++ b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp @@ -11,14 +11,22 @@ // template , // class Distance = ptrdiff_t> // class ostream_iterator -// : public iterator +// : public iterator // until C++17 // { // public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef basic_istream istream_type; +// typedef output_iterator_tag iterator_category; +// typedef void value_type; +// typedef void difference_type; // until C++20 +// typedef ptrdiff_t difference_type; // since C++20 +// typedef void pointer; +// typedef void reference; +// +// typedef charT char_type; +// typedef traits traits_type; +// typedef basic_ostream ostream_type; // ... +#include #include #include @@ -26,34 +34,47 @@ int main(int, char**) { + { typedef std::ostream_iterator I1; #if TEST_STD_VER <= 14 - static_assert((std::is_convertible >::value), ""); -#else + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), ""); +#else + static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#endif static_assert((std::is_same::value), ""); static_assert((std::is_same >::value), ""); static_assert((std::is_same::value), ""); + } + +#ifndef TEST_HAS_NO_WIDE_CHARACTERS + { typedef std::ostream_iterator I2; #if TEST_STD_VER <= 14 - static_assert((std::is_convertible >::value), ""); -#else + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), ""); +#else + static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#endif static_assert((std::is_same::value), ""); static_assert((std::is_same >::value), ""); static_assert((std::is_same::value), ""); + } +#endif // TEST_HAS_NO_WIDE_CHARACTERS return 0; } diff --git a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp new file mode 100644 index 00000000000..fc847cdbbb2 --- /dev/null +++ b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/iterator_concept_conformance.compile.pass.cpp @@ -0,0 +1,35 @@ +//===----------------------------------------------------------------------===// +// +// 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 + +// ostreambuf_iterator + +#include + +#include +#include + +using iterator = std::ostreambuf_iterator; +static_assert(!std::indirectly_readable); +static_assert(std::indirectly_writable); +static_assert(std::weakly_incrementable); +static_assert(std::input_or_output_iterator); +static_assert(!std::sentinel_for); +static_assert(!std::sized_sentinel_for); +static_assert(!std::input_iterator); +static_assert(std::indirectly_movable); +static_assert(std::indirectly_movable_storable); +static_assert(std::indirectly_copyable); +static_assert(std::indirectly_copyable_storable); +static_assert(!std::indirectly_swappable); + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/types.pass.cpp b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/types.pass.cpp index 671a09bb7a3..9562297cb6b 100644 --- a/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/types.pass.cpp +++ b/libcudacxx/libcxx/test/std/iterators/stream.iterators/ostreambuf.iterator/types.pass.cpp @@ -10,15 +10,23 @@ // template > // class ostreambuf_iterator -// : public iterator +// : public iterator // until C++17 // { // public: -// typedef charT char_type; -// typedef traits traits_type; -// typedef basic_streambuf streambuf_type; -// typedef basic_ostream ostream_type; -// ... +// typedef output_iterator_tag iterator_category; +// typedef void value_type; +// typedef void difference_type; // until C++20 +// typedef ptrdiff_t difference_type; // since C++20 +// typedef void pointer; +// typedef void reference; +// +// typedef charT char_type; +// typedef traits traits_type; +// typedef basic_streambuf streambuf_type; +// typedef basic_ostream ostream_type; +// ... +#include #include #include #include @@ -27,37 +35,49 @@ int main(int, char**) { + { typedef std::ostreambuf_iterator I1; #if TEST_STD_VER <= 14 - static_assert((std::is_convertible >::value), ""); -#else + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), ""); +#else + static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#endif static_assert((std::is_same::value), ""); static_assert((std::is_same >::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); + } +#ifndef TEST_HAS_NO_WIDE_CHARACTERS + { typedef std::ostreambuf_iterator I2; #if TEST_STD_VER <= 14 - static_assert((std::is_convertible >::value), ""); -#else + typedef std::iterator iterator_base; + static_assert((std::is_base_of::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); +#if TEST_STD_VER <= 17 static_assert((std::is_same::value), ""); +#else + static_assert((std::is_same::value), ""); +#endif static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -#endif static_assert((std::is_same::value), ""); static_assert((std::is_same >::value), ""); static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); + } +#endif // TEST_HAS_NO_WIDE_CHARACTERS return 0; } diff --git a/libcudacxx/test/libcudacxx/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp b/libcudacxx/test/libcudacxx/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp new file mode 100644 index 00000000000..021b9ac9f04 --- /dev/null +++ b/libcudacxx/test/libcudacxx/std/iterators/iterator.primitives/iterator.basic/deprecated.verify.cpp @@ -0,0 +1,21 @@ +//===----------------------------------------------------------------------===// +// +// 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 +// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. +// +//===----------------------------------------------------------------------===// + +// UNSUPPORTED: c++03, c++11, c++14 + +// cuda::std::iterator + +#include + +cuda::std::iterator it; // expected-warning-re {{'iterator<{{.+}}>' is deprecated}} + +int main(int, char**) +{ + return 0; +} diff --git a/libcudacxx/test/libcudacxx/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp b/libcudacxx/test/libcudacxx/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp index a963b06d1c8..68603efe12a 100644 --- a/libcudacxx/test/libcudacxx/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp +++ b/libcudacxx/test/libcudacxx/std/iterators/stream.iterators/ostream.iterator/types.pass.cpp @@ -34,7 +34,11 @@ int main(int, char**) #else static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); +#if TEST_STD_VER > 17 + static_assert((cuda::std::is_same::value), ""); +#else static_assert((cuda::std::is_same::value), ""); +#endif static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); #endif @@ -48,7 +52,11 @@ int main(int, char**) #else static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); +#if TEST_STD_VER > 17 + static_assert((cuda::std::is_same::value), ""); +#else static_assert((cuda::std::is_same::value), ""); +#endif static_assert((cuda::std::is_same::value), ""); static_assert((cuda::std::is_same::value), ""); #endif