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 Varlamovvoid 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