Differential D102809 Diff 353439 libcxx/test/std/iterators/iterator.requirements/alg.req.ind.move/indirectly_movable_storable.subsumption.compile.pass.cpp
Changeset View
Changeset View
Standalone View
Standalone View
libcxx/test/std/iterators/iterator.requirements/alg.req.ind.move/indirectly_movable_storable.subsumption.compile.pass.cpp
- This file was copied from libcxx/test/std/utilities/memory/unique.ptr/iterator_concept_conformance.compile.pass.cpp.
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// | // | ||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||||
// See https://llvm.org/LICENSE.txt for license information. | // See https://llvm.org/LICENSE.txt for license information. | ||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||||
// | // | ||||
//===----------------------------------------------------------------------===// | //===----------------------------------------------------------------------===// | ||||
// UNSUPPORTED: c++03, c++11, c++14, c++17 | // UNSUPPORTED: c++03, c++11, c++14, c++17 | ||||
// UNSUPPORTED: libcpp-no-concepts | // UNSUPPORTED: libcpp-no-concepts | ||||
// UNSUPPORTED: gcc-10 | // UNSUPPORTED: gcc-10 | ||||
// unique_ptr | // template<class In, class Out> | ||||
// concept indirectly_movable_storable; | |||||
#include <memory> | |||||
#include <iterator> | #include <iterator> | ||||
static_assert(std::indirectly_readable<std::unique_ptr<int> >); | #include <concepts> | ||||
static_assert(std::indirectly_writable<std::unique_ptr<int>, int>); | |||||
static_assert(!std::weakly_incrementable<std::unique_ptr<int> >); | template<class I, class O> | ||||
requires std::indirectly_movable<I, O> | |||||
static_assert(!std::indirectly_readable<std::unique_ptr<void> >); | constexpr bool indirectly_movable_storable_subsumption() { | ||||
static_assert(!std::indirectly_writable<std::unique_ptr<void>, void>); | return false; | ||||
static_assert(!std::weakly_incrementable<std::unique_ptr<void> >); | } | ||||
template<class I, class O> | |||||
requires std::indirectly_movable_storable<I, O> | |||||
constexpr bool indirectly_movable_storable_subsumption() { | |||||
return true; | |||||
} | |||||
static_assert(indirectly_movable_storable_subsumption<int*, int*>()); |