Blame view

3rdparty/boost_1_81_0/boost/parameter/required.hpp 1.79 KB
dbf9e800   Hu Chunming   提交_GLIBCXX_USE_CX...
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
  // Copyright David Abrahams, Daniel Wallin 2003.
  // 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_PARAMETER_REQUIRED_HPP
  #define BOOST_PARAMETER_REQUIRED_HPP
  
  #include <boost/parameter/aux_/use_default.hpp>
  
  namespace boost { namespace parameter {
  
      // This metafunction can be used to describe the treatment of particular
      // named parameters for the purposes of overload elimination with SFINAE,
      // by placing specializations in the parameters<...> list.  In order for
      // a treated function to participate in overload resolution:
      //
      //   - all keyword tags wrapped in required<...> must have a matching
      //     actual argument
      //
      //   - The actual argument type matched by every keyword tag
      //     associated with a predicate must satisfy that predicate
      template <
          typename Tag
        , typename Predicate = ::boost::parameter::aux::use_default
      >
      struct required
      {
          typedef Tag key_type;
          typedef Predicate predicate;
      };
  }}
  
  #include <boost/parameter/config.hpp>
  
  #if defined(BOOST_PARAMETER_CAN_USE_MP11)
  #include <boost/mp11/integral.hpp>
  #else
  #include <boost/mpl/bool.hpp>
  #endif
  
  namespace boost { namespace parameter { namespace aux {
  
      template <typename T>
      struct is_required
  #if defined(BOOST_PARAMETER_CAN_USE_MP11)
        : ::boost::mp11::mp_false
  #else
        : ::boost::mpl::false_
  #endif
      {
      };
  
      template <typename Tag, typename Predicate>
      struct is_required< ::boost::parameter::required<Tag,Predicate> >
  #if defined(BOOST_PARAMETER_CAN_USE_MP11)
        : ::boost::mp11::mp_true
  #else
        : ::boost::mpl::true_
  #endif
      {
      };
  }}} // namespace boost::parameter::aux
  
  #endif  // include guard