xref: /llvm-project/libcxx/test/std/ranges/range.access/begin.verify.cpp (revision b8cb1dc9ea87faa8e8e9ab7a31710a8c0bb8b084)
1*79a2b4baSKonstantin Varlamov //===----------------------------------------------------------------------===//
2*79a2b4baSKonstantin Varlamov //
3*79a2b4baSKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*79a2b4baSKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information.
5*79a2b4baSKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*79a2b4baSKonstantin Varlamov //
7*79a2b4baSKonstantin Varlamov //===----------------------------------------------------------------------===//
8*79a2b4baSKonstantin Varlamov 
9*79a2b4baSKonstantin Varlamov // UNSUPPORTED: c++03, c++11, c++14, c++17
10*79a2b4baSKonstantin Varlamov 
11*79a2b4baSKonstantin Varlamov // std::ranges::begin
12*79a2b4baSKonstantin Varlamov 
13*79a2b4baSKonstantin Varlamov #include <ranges>
14*79a2b4baSKonstantin Varlamov 
15*79a2b4baSKonstantin Varlamov struct NonBorrowedRange {
16*79a2b4baSKonstantin Varlamov   int* begin() const;
17*79a2b4baSKonstantin Varlamov   int* end() const;
18*79a2b4baSKonstantin Varlamov };
19*79a2b4baSKonstantin Varlamov static_assert(!std::ranges::enable_borrowed_range<NonBorrowedRange>);
20*79a2b4baSKonstantin Varlamov 
21*79a2b4baSKonstantin Varlamov // Verify that if the expression is an rvalue and `enable_borrowed_range` is false, `ranges::begin` is ill-formed.
test()22*79a2b4baSKonstantin Varlamov void test() {
23*79a2b4baSKonstantin Varlamov   std::ranges::begin(NonBorrowedRange());
24*79a2b4baSKonstantin Varlamov   // expected-error-re@-1 {{{{call to deleted function call operator in type 'const (std::ranges::)?__begin::__fn'}}}}
25*79a2b4baSKonstantin Varlamov   // expected-error@-2  {{attempt to use a deleted function}}
26*79a2b4baSKonstantin Varlamov }
27