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 // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11*79a2b4baSKonstantin Varlamov 
12*79a2b4baSKonstantin Varlamov // std::ranges::data
13*79a2b4baSKonstantin Varlamov 
14*79a2b4baSKonstantin Varlamov #include <ranges>
15*79a2b4baSKonstantin Varlamov 
16*79a2b4baSKonstantin Varlamov struct NonBorrowedRange {
17*79a2b4baSKonstantin Varlamov   int* begin() const;
18*79a2b4baSKonstantin Varlamov   int* end() const;
19*79a2b4baSKonstantin Varlamov };
20*79a2b4baSKonstantin Varlamov static_assert(!std::ranges::enable_borrowed_range<NonBorrowedRange>);
21*79a2b4baSKonstantin Varlamov 
22*79a2b4baSKonstantin Varlamov // Verify that if the expression is an rvalue and `enable_borrowed_range` is false, `ranges::data` is ill-formed.
test()23*79a2b4baSKonstantin Varlamov void test() {
24*79a2b4baSKonstantin Varlamov   std::ranges::data(NonBorrowedRange());
25*79a2b4baSKonstantin Varlamov   // expected-error-re@-1 {{{{no matching function for call to object of type 'const (std::ranges::)?__data::__fn'}}}}
26*79a2b4baSKonstantin Varlamov }
27