1481ad59bSzoecarver //===----------------------------------------------------------------------===//
2481ad59bSzoecarver //
3481ad59bSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4481ad59bSzoecarver // See https://llvm.org/LICENSE.txt for license information.
5481ad59bSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6481ad59bSzoecarver //
7481ad59bSzoecarver //===----------------------------------------------------------------------===//
8481ad59bSzoecarver 
9481ad59bSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17
10481ad59bSzoecarver // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11481ad59bSzoecarver 
12481ad59bSzoecarver // Tests that <value_> is a <copyable-box>.
13481ad59bSzoecarver 
14481ad59bSzoecarver #include <cassert>
15*52915d78SNikolas Klauser #include <ranges>
16*52915d78SNikolas Klauser #include <utility>
17481ad59bSzoecarver 
18481ad59bSzoecarver #include "test_macros.h"
19481ad59bSzoecarver 
20481ad59bSzoecarver struct NotAssignable {
21481ad59bSzoecarver   NotAssignable() = default;
22481ad59bSzoecarver   NotAssignable(const NotAssignable&) = default;
23481ad59bSzoecarver   NotAssignable(NotAssignable&&) = default;
24481ad59bSzoecarver 
25481ad59bSzoecarver   NotAssignable& operator=(const NotAssignable&) = delete;
26481ad59bSzoecarver   NotAssignable& operator=(NotAssignable&&) = delete;
27481ad59bSzoecarver };
28481ad59bSzoecarver 
test()29481ad59bSzoecarver constexpr bool test() {
30481ad59bSzoecarver   const std::ranges::single_view<NotAssignable> a;
31481ad59bSzoecarver   std::ranges::single_view<NotAssignable> b;
32481ad59bSzoecarver   b = a;
33481ad59bSzoecarver   b = std::move(a);
34481ad59bSzoecarver 
35481ad59bSzoecarver   return true;
36481ad59bSzoecarver }
37481ad59bSzoecarver 
main(int,char **)38481ad59bSzoecarver int main(int, char**) {
39481ad59bSzoecarver   test();
40481ad59bSzoecarver   static_assert(test());
41481ad59bSzoecarver 
42481ad59bSzoecarver   return 0;
43481ad59bSzoecarver }
44