57 lines · cpp
1//===----------------------------------------------------------------------===//2//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-exception6//7//===----------------------------------------------------------------------===//8 9// <string>10 11// reverse_iterator rend(); // constexpr since C++2012// const_reverse_iterator rend() const; // constexpr since C++2013 14#include <string>15#include <cassert>16#include <cstddef>17 18#include "test_macros.h"19#include "min_allocator.h"20 21template <class S>22TEST_CONSTEXPR_CXX20 void test(S s) {23 const S& cs = s;24 typename S::reverse_iterator e = s.rend();25 typename S::const_reverse_iterator ce = cs.rend();26 if (s.empty()) {27 assert(e == s.rbegin());28 assert(ce == cs.rbegin());29 }30 assert(static_cast<std::size_t>(e - s.rbegin()) == s.size());31 assert(static_cast<std::size_t>(ce - cs.rbegin()) == cs.size());32}33 34template <class S>35TEST_CONSTEXPR_CXX20 void test_string() {36 test(S());37 test(S("123"));38}39 40TEST_CONSTEXPR_CXX20 bool test() {41 test_string<std::string>();42#if TEST_STD_VER >= 1143 test_string<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >();44#endif45 46 return true;47}48 49int main(int, char**) {50 test();51#if TEST_STD_VER > 1752 static_assert(test());53#endif54 55 return 0;56}57