brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · ce89fb5 Raw
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// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// template<class R>12// concept random_access_range;13 14#include <ranges>15 16#include "test_range.h"17#include "test_iterators.h"18 19namespace ranges = std::ranges;20 21template <template <class...> class I>22constexpr bool check_range() {23  constexpr bool result = ranges::random_access_range<test_range<I> >;24  static_assert(ranges::random_access_range<test_range<I> const> == result);25  static_assert(ranges::random_access_range<test_non_const_common_range<I> > == result);26  static_assert(ranges::random_access_range<test_non_const_range<I> > == result);27  static_assert(ranges::random_access_range<test_common_range<I> > == result);28  static_assert(ranges::random_access_range<test_common_range<I> const> == result);29  static_assert(!ranges::random_access_range<test_non_const_common_range<I> const>);30  static_assert(!ranges::random_access_range<test_non_const_range<I> const>);31  return result;32}33 34static_assert(!check_range<cpp20_input_iterator>());35static_assert(!check_range<forward_iterator>());36static_assert(!check_range<bidirectional_iterator>());37static_assert(check_range<random_access_iterator>());38static_assert(check_range<contiguous_iterator>());39 40// Test ADL-proofing.41struct Incomplete;42template<class T> struct Holder { T t; };43 44static_assert(!std::ranges::random_access_range<Holder<Incomplete>*>);45static_assert(!std::ranges::random_access_range<Holder<Incomplete>*&>);46static_assert(!std::ranges::random_access_range<Holder<Incomplete>*&&>);47static_assert(!std::ranges::random_access_range<Holder<Incomplete>* const>);48static_assert(!std::ranges::random_access_range<Holder<Incomplete>* const&>);49static_assert(!std::ranges::random_access_range<Holder<Incomplete>* const&&>);50 51static_assert( std::ranges::random_access_range<Holder<Incomplete>*[10]>);52static_assert( std::ranges::random_access_range<Holder<Incomplete>*(&)[10]>);53static_assert( std::ranges::random_access_range<Holder<Incomplete>*(&&)[10]>);54static_assert( std::ranges::random_access_range<Holder<Incomplete>* const[10]>);55static_assert( std::ranges::random_access_range<Holder<Incomplete>* const(&)[10]>);56static_assert( std::ranges::random_access_range<Holder<Incomplete>* const(&&)[10]>);57