1*e65d3760SKonstantin Varlamov //===----------------------------------------------------------------------===//
2*e65d3760SKonstantin Varlamov //
3*e65d3760SKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e65d3760SKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information.
5*e65d3760SKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e65d3760SKonstantin Varlamov //
7*e65d3760SKonstantin Varlamov //===----------------------------------------------------------------------===//
8*e65d3760SKonstantin Varlamov 
9*e65d3760SKonstantin Varlamov // UNSUPPORTED: c++03, c++11, c++14, c++17
10*e65d3760SKonstantin Varlamov 
11*e65d3760SKonstantin Varlamov // template<class In, class Out>
12*e65d3760SKonstantin Varlamov // concept indirectly_copyable;
13*e65d3760SKonstantin Varlamov 
14*e65d3760SKonstantin Varlamov #include <iterator>
15*e65d3760SKonstantin Varlamov 
16*e65d3760SKonstantin Varlamov template<std::indirectly_readable I, class O>
indirectly_copyable_subsumption()17*e65d3760SKonstantin Varlamov constexpr bool indirectly_copyable_subsumption() {
18*e65d3760SKonstantin Varlamov   return false;
19*e65d3760SKonstantin Varlamov }
20*e65d3760SKonstantin Varlamov 
21*e65d3760SKonstantin Varlamov template<class I, class O>
22*e65d3760SKonstantin Varlamov   requires std::indirectly_copyable<I, O>
indirectly_copyable_subsumption()23*e65d3760SKonstantin Varlamov constexpr bool indirectly_copyable_subsumption() {
24*e65d3760SKonstantin Varlamov   return true;
25*e65d3760SKonstantin Varlamov }
26*e65d3760SKonstantin Varlamov 
27*e65d3760SKonstantin Varlamov static_assert(indirectly_copyable_subsumption<int*, int*>());
28