brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 328f55c Raw
78 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 T>12// concept sized_range;13 14#include <ranges>15 16#include "test_iterators.h"17 18 19 20static_assert(std::ranges::sized_range<int[5]>);21static_assert(std::ranges::sized_range<int (&)[5]>);22static_assert(!std::ranges::sized_range<int (&)[]>);23static_assert(!std::ranges::sized_range<int[]>);24 25struct range_has_size {26  bidirectional_iterator<int*> begin();27  bidirectional_iterator<int*> end();28  int size();29};30static_assert(std::ranges::sized_range<range_has_size>);31static_assert(!std::ranges::sized_range<range_has_size const>);32 33struct range_has_const_size {34  bidirectional_iterator<int*> begin();35  bidirectional_iterator<int*> end();36  int size() const;37};38static_assert(std::ranges::sized_range<range_has_const_size>);39static_assert(!std::ranges::sized_range<range_has_const_size const>);40 41struct const_range_has_size {42  bidirectional_iterator<int*> begin() const;43  bidirectional_iterator<int*> end() const;44  int size();45};46static_assert(std::ranges::sized_range<const_range_has_size>);47static_assert(std::ranges::range<const_range_has_size const>);48static_assert(!std::ranges::sized_range<const_range_has_size const>);49 50struct const_range_has_const_size {51  bidirectional_iterator<int*> begin() const;52  bidirectional_iterator<int*> end() const;53  int size() const;54};55static_assert(std::ranges::sized_range<const_range_has_const_size>);56static_assert(std::ranges::sized_range<const_range_has_const_size const>);57 58struct sized_sentinel_range_has_size {59  int* begin();60  int* end();61};62static_assert(std::ranges::sized_range<sized_sentinel_range_has_size>);63static_assert(!std::ranges::sized_range<sized_sentinel_range_has_size const>);64 65struct const_sized_sentinel_range_has_size {66  int* begin() const;67  int* end() const;68};69static_assert(std::ranges::sized_range<const_sized_sentinel_range_has_size>);70static_assert(std::ranges::sized_range<const_sized_sentinel_range_has_size const>);71 72struct non_range_has_size {73  int size() const;74};75static_assert(requires(non_range_has_size const x) { std::ranges::size(x); });76static_assert(!std::ranges::sized_range<non_range_has_size>);77static_assert(!std::ranges::sized_range<non_range_has_size const>);78