1 //===----------------------------------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 // UNSUPPORTED: !stdlib=libc++ && (c++03 || c++11 || c++14)
13 // constexpr const_iterator rend() const;
15 #include <string_view>
19 #include "test_macros.h"
24 typename
S::reverse_iterator e
= s
.rend();
25 typename
S::const_reverse_iterator ce1
= cs
.rend();
26 typename
S::const_reverse_iterator ce2
= s
.crend();
29 assert(e
== s
.rbegin());
30 assert(ce1
== cs
.rbegin());
31 assert(ce2
== s
.rbegin());
33 assert(e
!= s
.rbegin());
34 assert(ce1
!= cs
.rbegin());
35 assert(ce2
!= s
.rbegin());
38 assert(static_cast<std::size_t>(e
- s
.rbegin()) == s
.size());
39 assert(static_cast<std::size_t>(ce1
- cs
.rbegin()) == cs
.size());
40 assert(static_cast<std::size_t>(ce2
- s
.crbegin()) == s
.size());
47 int main(int, char**) {
48 typedef std::string_view string_view
;
49 #ifndef TEST_HAS_NO_CHAR8_T
50 typedef std::u8string_view u8string_view
;
52 typedef std::u16string_view u16string_view
;
53 typedef std::u32string_view u32string_view
;
56 test(u16string_view());
57 test(u32string_view());
58 test(string_view("123"));
59 #ifndef TEST_HAS_NO_CHAR8_T
60 test(u8string_view
{u8
"123"});
62 #if TEST_STD_VER >= 11
63 test(u16string_view
{u
"123"});
64 test(u32string_view
{U
"123"});
67 #ifndef TEST_HAS_NO_WIDE_CHARACTERS
68 typedef std::wstring_view wstring_view
;
70 test(wstring_view(L
"123"));
75 constexpr string_view sv
{"123", 3};
76 # ifndef TEST_HAS_NO_CHAR8_T
77 constexpr u8string_view u8sv
{u8
"123", 3};
79 constexpr u16string_view u16sv
{u
"123", 3};
80 constexpr u32string_view u32sv
{U
"123", 3};
82 static_assert(*--sv
.rend() == sv
[0], "");
83 # ifndef TEST_HAS_NO_CHAR8_T
84 static_assert(*--u8sv
.rend() == u8sv
[0], "");
86 static_assert(*--u16sv
.rend() == u16sv
[0], "");
87 static_assert(*--u32sv
.rend() == u32sv
[0], "");
89 static_assert(*--sv
.crend() == sv
[0], "");
90 # ifndef TEST_HAS_NO_CHAR8_T
91 static_assert(*--u8sv
.crend() == u8sv
[0], "");
93 static_assert(*--u16sv
.crend() == u16sv
[0], "");
94 static_assert(*--u32sv
.crend() == u32sv
[0], "");
96 # ifndef TEST_HAS_NO_WIDE_CHARACTERS
98 constexpr wstring_view wsv
{L
"123", 3};
99 static_assert(*--wsv
.rend() == wsv
[0], "");
100 static_assert(*--wsv
.crend() == wsv
[0], "");
104 #endif // TEST_STD_VER > 14