73 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// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// constexpr T* begin() noexcept;12// constexpr const T* begin() const noexcept;13 14#include <ranges>15#include <cassert>16 17#include "test_macros.h"18 19struct Empty {};20struct BigType { char buffer[64] = {10}; };21 22constexpr bool test() {23 {24 auto sv = std::ranges::single_view<int>(42);25 assert(*sv.begin() == 42);26 27 ASSERT_SAME_TYPE(decltype(sv.begin()), int*);28 static_assert(noexcept(sv.begin()));29 }30 {31 const auto sv = std::ranges::single_view<int>(42);32 assert(*sv.begin() == 42);33 34 ASSERT_SAME_TYPE(decltype(sv.begin()), const int*);35 static_assert(noexcept(sv.begin()));36 }37 38 {39 auto sv = std::ranges::single_view<Empty>(Empty());40 assert(sv.begin() != nullptr);41 42 ASSERT_SAME_TYPE(decltype(sv.begin()), Empty*);43 }44 {45 const auto sv = std::ranges::single_view<Empty>(Empty());46 assert(sv.begin() != nullptr);47 48 ASSERT_SAME_TYPE(decltype(sv.begin()), const Empty*);49 }50 51 {52 auto sv = std::ranges::single_view<BigType>(BigType());53 assert(sv.begin()->buffer[0] == 10);54 55 ASSERT_SAME_TYPE(decltype(sv.begin()), BigType*);56 }57 {58 const auto sv = std::ranges::single_view<BigType>(BigType());59 assert(sv.begin()->buffer[0] == 10);60 61 ASSERT_SAME_TYPE(decltype(sv.begin()), const BigType*);62 }63 64 return true;65}66 67int main(int, char**) {68 test();69 static_assert(test());70 71 return 0;72}73