is_sequence.hpp
Go to the documentation of this file.
1 
2 #ifndef BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
3 #define BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
4 
5 // Copyright Aleksey Gurtovoy 2002-2004
6 //
7 // Distributed under the Boost Software License, Version 1.0.
8 // (See accompanying file LICENSE_1_0.txt or copy at
9 // http://www.boost.org/LICENSE_1_0.txt)
10 //
11 // See http://www.boost.org/libs/mpl for documentation.
12 
13 // $Id: is_sequence.hpp 13472 2017-08-22 07:53:44Z richean $
14 // $Date: 2017-08-22 09:53:44 +0200 (Di, 22 Aug 2017) $
15 // $Revision: 13472 $
16 
17 #include <boost/mpl/not.hpp>
18 #include <boost/mpl/and.hpp>
19 #include <boost/mpl/begin_end.hpp>
20 #include <boost/mpl/if.hpp>
21 #include <boost/mpl/bool.hpp>
23 #include <boost/mpl/identity.hpp>
24 #include <boost/mpl/void.hpp>
32 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
34 #elif BOOST_WORKAROUND(BOOST_MSVC, == 1300)
36 #endif
37 
39 
40 namespace boost { namespace mpl {
41 
42 #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
43 
44 namespace aux {
45 
46 // agurt, 11/jun/03:
47 // MSVC 6.5/7.0 fails if 'has_begin' is instantiated on a class type that has a
48 // 'begin' member that doesn't name a type; e.g. 'has_begin< std::vector<int> >'
49 // would fail; requiring 'T' to have _both_ 'tag' and 'begin' members workarounds
50 // the issue for most real-world cases
51 template< typename T > struct is_sequence_impl
52  : and_<
53  identity< aux::has_tag<T> >
54  , identity< aux::has_begin<T> >
55  >
56 {
57 };
58 
59 } // namespace aux
60 
61 template<
62  typename BOOST_MPL_AUX_NA_PARAM(T)
63  >
64 struct is_sequence
65  : if_<
66 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
67  aux::msvc_is_class<T>
68 #else
69  boost::is_class<T>
70 #endif
71  , aux::is_sequence_impl<T>
72  , bool_<false>
73  >::type
74 {
75  BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
76 };
77 
78 #elif defined(BOOST_MPL_CFG_NO_HAS_XXX)
79 
80 template<
81  typename BOOST_MPL_AUX_NA_PARAM(T)
82  >
83 struct is_sequence
84  : bool_<false>
85 {
86 };
87 
88 #else
89 
90 template<
91  typename BOOST_MPL_AUX_NA_PARAM(T)
92  >
93 struct is_sequence
94  : not_< is_same< typename begin<T>::type, void_ > >
95 {
96  BOOST_MPL_AUX_LAMBDA_SUPPORT(1, is_sequence, (T))
97 };
98 
99 #endif // BOOST_MSVC
100 
101 #if defined(BOOST_MPL_CFG_MSVC_60_ETI_BUG)
102 template<> struct is_sequence<int>
103  : bool_<false>
104 {
105 };
106 #endif
107 
108 BOOST_MPL_AUX_NA_SPEC_NO_ETI(1, is_sequence)
109 
110 }}
111 
112 #endif // BOOST_MPL_IS_SEQUENCE_HPP_INCLUDED
identity.hpp
T
T
Definition: mem_fn_cc.hpp:25
BOOST_MPL_AUX_NA_PARAM
#define BOOST_MPL_AUX_NA_PARAM(param)
Definition: na_spec.hpp:152
na_spec.hpp
bool.hpp
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
boost::foreach_detail_::and_
boost::mpl::and_< Bool1, Bool2 > * and_(Bool1 *, Bool2 *)
Definition: foreach.hpp:203
and.hpp
sequence_tag_fwd.hpp
workaround.hpp
is_class.hpp
msvc.hpp
eti.hpp
is_same.hpp
has_begin.hpp
begin_end.hpp
has_tag.hpp
void.hpp
not.hpp
msvc_is_class.hpp
lambda_support.hpp
if.hpp


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