//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++03, c++11, c++14, c++17 // template // concept sized_range; #include #include "test_iterators.h" static_assert(std::ranges::sized_range); static_assert(std::ranges::sized_range); static_assert(!std::ranges::sized_range); static_assert(!std::ranges::sized_range); struct range_has_size { bidirectional_iterator begin(); bidirectional_iterator end(); int size(); }; static_assert(std::ranges::sized_range); static_assert(!std::ranges::sized_range); struct range_has_const_size { bidirectional_iterator begin(); bidirectional_iterator end(); int size() const; }; static_assert(std::ranges::sized_range); static_assert(!std::ranges::sized_range); struct const_range_has_size { bidirectional_iterator begin() const; bidirectional_iterator end() const; int size(); }; static_assert(std::ranges::sized_range); static_assert(std::ranges::range); static_assert(!std::ranges::sized_range); struct const_range_has_const_size { bidirectional_iterator begin() const; bidirectional_iterator end() const; int size() const; }; static_assert(std::ranges::sized_range); static_assert(std::ranges::sized_range); struct sized_sentinel_range_has_size { int* begin(); int* end(); }; static_assert(std::ranges::sized_range); static_assert(!std::ranges::sized_range); struct const_sized_sentinel_range_has_size { int* begin() const; int* end() const; }; static_assert(std::ranges::sized_range); static_assert(std::ranges::sized_range); struct non_range_has_size { int size() const; }; static_assert(requires(non_range_has_size const x) { std::ranges::size(x); }); static_assert(!std::ranges::sized_range); static_assert(!std::ranges::sized_range);