iterator/detail/enable_if.hpp
Go to the documentation of this file.
1 // (C) Copyright David Abrahams 2002.
2 // (C) Copyright Jeremy Siek 2002.
3 // (C) Copyright Thomas Witt 2002.
4 // Distributed under the Boost Software License, Version 1.0. (See
5 // accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 #ifndef BOOST_ENABLE_IF_23022003THW_HPP
8 #define BOOST_ENABLE_IF_23022003THW_HPP
9 
11 #include <boost/mpl/identity.hpp>
12 
14 
15 //
16 // Boost iterators uses its own enable_if cause we need
17 // special semantics for deficient compilers.
18 // 23/02/03 thw
19 //
20 
21 namespace boost
22 {
23 
24  namespace iterators
25  {
26  //
27  // Base machinery for all kinds of enable if
28  //
29  template<bool>
30  struct enabled
31  {
32  template<typename T>
33  struct base
34  {
35  typedef T type;
36  };
37  };
38 
39  //
40  // For compilers that don't support "Substitution Failure Is Not An Error"
41  // enable_if falls back to always enabled. See comments
42  // on operator implementation for consequences.
43  //
44  template<>
45  struct enabled<false>
46  {
47  template<typename T>
48  struct base
49  {
50 #ifdef BOOST_NO_SFINAE
51 
52  typedef T type;
53 
54  // This way to do it would give a nice error message containing
55  // invalid overload, but has the big disadvantage that
56  // there is no reference to user code in the error message.
57  //
58  // struct invalid_overload;
59  // typedef invalid_overload type;
60  //
61 #endif
62  };
63  };
64 
65 
66  template <class Cond,
67  class Return>
68  struct enable_if
69 # if !defined(BOOST_NO_SFINAE) && !defined(BOOST_NO_IS_CONVERTIBLE)
70  : enabled<(Cond::value)>::template base<Return>
71 # else
72  : mpl::identity<Return>
73 # endif
74  {
75  };
76 
77  } // namespace iterators
78 
79 } // namespace boost
80 
82 
83 #endif // BOOST_ENABLE_IF_23022003THW_HPP
boost::iterators::enable_if
Definition: iterator/detail/enable_if.hpp:68
boost::iterators::enabled::base
Definition: iterator/detail/enable_if.hpp:33
identity.hpp
T
T
Definition: mem_fn_cc.hpp:25
template
string template
boost::iterators::enabled::base::type
T type
Definition: iterator/detail/enable_if.hpp:35
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
config_def.hpp
BOOST_NO_SFINAE
#define BOOST_NO_SFINAE
Definition: borland.hpp:99
boost::iterators::enabled
Definition: iterator/detail/enable_if.hpp:30
config_undef.hpp
workaround.hpp


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:38:54