//===----------------------------------------------------------------------===// // // 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 // UNSUPPORTED: libcpp-has-no-incomplete-ranges // template // using range_size_t = decltype(ranges::size(declval())); #include #include #include #include "test_iterators.h" template concept has_range_size_t = requires { typename std::ranges::range_size_t; }; struct A { int *begin(); int *end(); short size(); }; static_assert(std::same_as, short>); static_assert(std::same_as, short>); static_assert(std::same_as, short>); static_assert(!has_range_size_t); static_assert(!has_range_size_t); static_assert(!has_range_size_t); struct B { int *begin(); int *end(); }; static_assert(std::same_as, std::size_t>); static_assert(std::same_as, std::size_t>); static_assert(std::same_as, std::size_t>); static_assert(!has_range_size_t); static_assert(!has_range_size_t); static_assert(!has_range_size_t); struct C { bidirectional_iterator begin(); bidirectional_iterator end(); }; static_assert(!has_range_size_t);