File: functional.hh

package info (click to toggle)
dune-common 2.10.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,824 kB
  • sloc: cpp: 52,256; python: 3,979; sh: 1,658; makefile: 17
file content (36 lines) | stat: -rw-r--r-- 1,099 bytes parent folder | download | duplicates (3)
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
29
30
31
32
33
34
35
36
// -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
// vi: set ts=8 sw=2 et sts=2:
// SPDX-FileCopyrightInfo: Copyright © DUNE Project contributors, see file LICENSE.md in module root
// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
#ifndef DUNE_COMMON_STD_FUNCTIONAL_HH
#define DUNE_COMMON_STD_FUNCTIONAL_HH

#include <functional>

#include <dune-common-config.hh> // DUNE_HAVE_CXX_STD_IDENTITY

namespace Dune
{

  namespace Std
  {

    /**
     * @brief   A function object type whose operator() returns its argument unchanged
     * @note    Equivalent to: `return std::forward(t);`
     * @warning When passing `r-values`, the result must be, at most, used for direct
     *          consumption in an outer function call
     */
#if DUNE_HAVE_CXX_STD_IDENTITY
    using std::identity;
#else //DUNE_HAVE_CXX_STD_IDENTITY
    struct identity {
      template<class T>
      constexpr T&& operator()(T&& t ) const noexcept {return std::forward<T>(t);}
    };
#endif
  } // namespace Std

} // namespace Dune

#endif // #ifndef DUNE_COMMON_STD_FUNCTIONAL_HH