diff options
| -rw-r--r-- | libcxx/include/iterator | 3 | ||||
| -rw-r--r-- | libcxx/test/containers/sequences/vector/iterators.pass.cpp | 13 | ||||
| -rw-r--r-- | libcxx/test/strings/basic.string/string.iterators/iterators.pass.cpp | 73 |
3 files changed, 89 insertions, 0 deletions
diff --git a/libcxx/include/iterator b/libcxx/include/iterator index 4989d8b7a0d..858510d1562 100644 --- a/libcxx/include/iterator +++ b/libcxx/include/iterator @@ -1093,6 +1093,9 @@ private: iterator_type __i; public: _LIBCPP_INLINE_VISIBILITY __wrap_iter() _NOEXCEPT +#if _LIBCPP_STD_VER > 11 + : __i{} +#endif { #if _LIBCPP_DEBUG_LEVEL >= 2 __get_db()->__insert_i(this); diff --git a/libcxx/test/containers/sequences/vector/iterators.pass.cpp b/libcxx/test/containers/sequences/vector/iterators.pass.cpp index fbd40298d19..8e0d482f020 100644 --- a/libcxx/test/containers/sequences/vector/iterators.pass.cpp +++ b/libcxx/test/containers/sequences/vector/iterators.pass.cpp @@ -135,4 +135,17 @@ int main() assert(j->first == 3); } #endif +#if _LIBCPP_STD_VER > 11 + { // N3664 testing + typedef std::vector<int> C; + C::iterator ii1{}, ii2{}; + C::iterator ii4 = ii1; + C::const_iterator cii{}; + assert ( ii1 == ii2 ); + assert ( ii1 == ii4 ); + assert ( ii1 == cii ); + assert ( !(ii1 != ii2 )); + assert ( !(ii1 != cii )); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.iterators/iterators.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/iterators.pass.cpp new file mode 100644 index 00000000000..ff896094dbd --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/iterators.pass.cpp @@ -0,0 +1,73 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <string> + +// iterator begin(); +// iterator end(); +// const_iterator begin() const; +// const_iterator end() const; +// const_iterator cbegin() const; +// const_iterator cend() const; + +#include <string> +#include <cassert> + +int main() +{ +#if _LIBCPP_STD_VER > 11 + { // N3664 testing + typedef std::string C; + C::iterator ii1{}, ii2{}; + C::iterator ii4 = ii1; + C::const_iterator cii{}; + assert ( ii1 == ii2 ); + assert ( ii1 == ii4 ); + assert ( ii1 == cii ); + assert ( !(ii1 != ii2 )); + assert ( !(ii1 != cii )); + } + + { // N3664 testing + typedef std::wstring C; + C::iterator ii1{}, ii2{}; + C::iterator ii4 = ii1; + C::const_iterator cii{}; + assert ( ii1 == ii2 ); + assert ( ii1 == ii4 ); + assert ( ii1 == cii ); + assert ( !(ii1 != ii2 )); + assert ( !(ii1 != cii )); + } + + { // N3664 testing + typedef std::u16string C; + C::iterator ii1{}, ii2{}; + C::iterator ii4 = ii1; + C::const_iterator cii{}; + assert ( ii1 == ii2 ); + assert ( ii1 == ii4 ); + assert ( ii1 == cii ); + assert ( !(ii1 != ii2 )); + assert ( !(ii1 != cii )); + } + + { // N3664 testing + typedef std::u32string C; + C::iterator ii1{}, ii2{}; + C::iterator ii4 = ii1; + C::const_iterator cii{}; + assert ( ii1 == ii2 ); + assert ( ii1 == ii4 ); + assert ( ii1 == cii ); + assert ( !(ii1 != ii2 )); + assert ( !(ii1 != cii )); + } +#endif +} |

