Differential D102809 Diff 353439 libcxx/test/std/iterators/iterator.requirements/alg.req.ind.move/indirectly_movable.subsumption.compile.pass.cpp
Changeset View
Changeset View
Standalone View
Standalone View
libcxx/test/std/iterators/iterator.requirements/alg.req.ind.move/indirectly_movable.subsumption.compile.pass.cpp
- This file was copied from libcxx/test/std/iterators/predef.iterators/move.iterators/move.iterator/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 | ||||
// move_iterator | // template<class In, class Out> | ||||
// concept indirectly_movable; | |||||
#include <iterator> | #include <iterator> | ||||
using iterator = std::move_iterator<int*>; | #include <concepts> | ||||
template<std::indirectly_readable I, class O> | |||||
constexpr bool indirectly_movable_subsumption() { | |||||
return false; | |||||
} | |||||
template<class I, class O> | |||||
requires std::indirectly_movable<I, O> | |||||
constexpr bool indirectly_movable_subsumption() { | |||||
return true; | |||||
} | |||||
static_assert(std::input_iterator<iterator>); | static_assert(indirectly_movable_subsumption<int*, int*>()); | ||||
static_assert(!std::forward_iterator<iterator>); | |||||
static_assert(!std::indirectly_writable<iterator, int>); | |||||
static_assert(std::incrementable<iterator>); | |||||
static_assert(std::sentinel_for<iterator, iterator>); | |||||
static_assert(std::sized_sentinel_for<iterator, iterator>); |