Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/mpl/is_sequence.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
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 49267 2008-10-11 06:19:02Z agurtovoy $ | |
14 // $Date: 2008-10-10 23:19:02 -0700 (Fri, 10 Oct 2008) $ | |
15 // $Revision: 49267 $ | |
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> | |
22 #include <boost/mpl/sequence_tag_fwd.hpp> | |
23 #include <boost/mpl/identity.hpp> | |
24 #include <boost/mpl/void.hpp> | |
25 #include <boost/mpl/aux_/has_tag.hpp> | |
26 #include <boost/mpl/aux_/has_begin.hpp> | |
27 #include <boost/mpl/aux_/na_spec.hpp> | |
28 #include <boost/mpl/aux_/lambda_support.hpp> | |
29 #include <boost/mpl/aux_/config/eti.hpp> | |
30 #include <boost/mpl/aux_/config/msvc.hpp> | |
31 #include <boost/mpl/aux_/config/workaround.hpp> | |
32 #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) | |
33 # include <boost/mpl/aux_/msvc_is_class.hpp> | |
34 #elif BOOST_WORKAROUND(BOOST_MSVC, == 1300) | |
35 # include <boost/type_traits/is_class.hpp> | |
36 #endif | |
37 | |
38 #include <boost/type_traits/is_same.hpp> | |
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 |