File: iterator.hh

package info (click to toggle)
dune-common 2.11.0-1~exp2
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 6,056 kB
  • sloc: cpp: 54,404; python: 4,136; sh: 1,657; makefile: 17
file content (28 lines) | stat: -rw-r--r-- 1,012 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set et ts=4 sw=2 sts=2:
#ifndef DUNE_COMMON_STD_ITERATOR_HH
#define DUNE_COMMON_STD_ITERATOR_HH

#include <concepts>
#include <iterator>

namespace Dune::Std {

/**
 * \brief The `std::indirectly_copyable` concept specifies the relationship between
 * an `indirectly_readable` type and a type that is `indirectly_writable`. The
 * `indirectly_writable` type must be able to directly copy the object that the
 * `indirectly_readable` type references.
 *
 * The standard implementation is available in libstdc++ >= 10 and libc++ >= 15
 */
template <class In, class Out>
concept indirectly_copyable =
    std::indirectly_readable<In> &&
    std::indirectly_writable<Out, std::iter_reference_t<In>>;

} // end namespace Dune::Std

#endif // DUNE_COMMON_STD_ITERATOR_HH