Blame view

3rdparty/boost_1_81_0/boost/hof/identity.hpp 1.84 KB
63e88f80   Hu Chunming   提交三方库
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  /*=============================================================================
      Copyright (c) 2012 Paul Fultz II
      identity.h
      Distributed under the Boost Software License, Version 1.0. (See accompanying
      file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  ==============================================================================*/
  
  #ifndef BOOST_HOF_GUARD_FUNCTION_IDENTITY_H
  #define BOOST_HOF_GUARD_FUNCTION_IDENTITY_H
  
  /// identity
  /// ========
  /// 
  /// Description
  /// -----------
  /// 
  /// The `identity` function is an unary function object that returns whats given to it. 
  /// 
  /// Semantics
  /// ---------
  /// 
  ///     assert(identity(x) == x);
  /// 
  /// Synopsis
  /// --------
  /// 
  ///     template<class T>
  ///     constexpr T identity(T&& x);
  /// 
  
  #include <utility>
  #include <initializer_list>
  #include <boost/hof/detail/forward.hpp>
  #include <boost/hof/detail/static_const_var.hpp>
  
  namespace boost { namespace hof { namespace identity_detail {
  
  struct identity_base
  {
      template<class T>
      constexpr T operator()(T&& x) const 
      noexcept(std::is_reference<T>::value || BOOST_HOF_IS_NOTHROW_MOVE_CONSTRUCTIBLE(T))
      {
          return BOOST_HOF_FORWARD(T)(x);
      }
  
      template<class T>
      constexpr std::initializer_list<T>& operator()(std::initializer_list<T>& x) const noexcept
      {
          return x;
      }
  
      template<class T>
      constexpr const std::initializer_list<T>& operator()(const std::initializer_list<T>& x) const noexcept
      {
          return x;
      }
  
      template<class T>
      constexpr std::initializer_list<T> operator()(std::initializer_list<T>&& x) const noexcept(noexcept(std::initializer_list<T>(std::move(x))))
      {
          return BOOST_HOF_FORWARD(std::initializer_list<T>)(x);
      }
  };
  
  }
  
  BOOST_HOF_DECLARE_STATIC_VAR(identity, identity_detail::identity_base);
  
  }} // namespace boost::hof
  
  #endif