source: NonGTP/Boost/boost/type_traits/extent.hpp @ 857

Revision 857, 3.8 KB checked in by igarcia, 18 years ago (diff)
Line 
1
2//  (C) Copyright John Maddock 2005. 
3//  Use, modification and distribution are subject to the Boost Software License,
4//  Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
5//  http://www.boost.org/LICENSE_1_0.txt).
6//
7//  See http://www.boost.org/libs/type_traits for most recent version including documentation.
8
9
10#ifndef BOOST_TT_EXTENT_HPP_INCLUDED
11#define BOOST_TT_EXTENT_HPP_INCLUDED
12
13// should be the last #include
14#include "boost/type_traits/detail/size_t_trait_def.hpp"
15
16namespace boost {
17
18namespace detail{
19
20template <class T, std::size_t N>
21struct extent_imp
22{
23   BOOST_STATIC_CONSTANT(std::size_t, value = 0);
24};
25#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS)
26template <class T, std::size_t R, std::size_t N>
27struct extent_imp<T[R], N>
28{
29   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
30};
31
32template <class T, std::size_t R, std::size_t N>
33struct extent_imp<T const[R], N>
34{
35   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
36};
37
38template <class T, std::size_t R, std::size_t N>
39struct extent_imp<T volatile[R], N>
40{
41   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
42};
43
44template <class T, std::size_t R, std::size_t N>
45struct extent_imp<T const volatile[R], N>
46{
47   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
48};
49
50template <class T, std::size_t R>
51struct extent_imp<T[R],0>
52{
53   BOOST_STATIC_CONSTANT(std::size_t, value = R);
54};
55
56template <class T, std::size_t R>
57struct extent_imp<T const[R], 0>
58{
59   BOOST_STATIC_CONSTANT(std::size_t, value = R);
60};
61
62template <class T, std::size_t R>
63struct extent_imp<T volatile[R], 0>
64{
65   BOOST_STATIC_CONSTANT(std::size_t, value = R);
66};
67
68template <class T, std::size_t R>
69struct extent_imp<T const volatile[R], 0>
70{
71   BOOST_STATIC_CONSTANT(std::size_t, value = R);
72};
73
74#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) && !defined(__MWERKS__)
75template <class T, std::size_t N>
76struct extent_imp<T[], N>
77{
78   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
79};
80template <class T, std::size_t N>
81struct extent_imp<T const[], N>
82{
83   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
84};
85template <class T, std::size_t N>
86struct extent_imp<T volatile[], N>
87{
88   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
89};
90template <class T, std::size_t N>
91struct extent_imp<T const volatile[], N>
92{
93   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::extent_imp<T, N-1>::value));
94};
95template <class T>
96struct extent_imp<T[], 0>
97{
98   BOOST_STATIC_CONSTANT(std::size_t, value = 0);
99};
100template <class T>
101struct extent_imp<T const[], 0>
102{
103   BOOST_STATIC_CONSTANT(std::size_t, value = 0);
104};
105template <class T>
106struct extent_imp<T volatile[], 0>
107{
108   BOOST_STATIC_CONSTANT(std::size_t, value = 0);
109};
110template <class T>
111struct extent_imp<T const volatile[], 0>
112{
113   BOOST_STATIC_CONSTANT(std::size_t, value = 0);
114};
115#endif
116#endif
117}
118
119template <class T, std::size_t N = 0>
120struct extent
121   : public ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value>
122{
123#if BOOST_WORKAROUND(BOOST_MSVC, <= 1200)
124   typedef ::boost::integral_constant<std::size_t, ::boost::detail::extent_imp<T,N>::value> base_;
125   using base_::value;
126#endif
127    BOOST_MPL_AUX_LAMBDA_SUPPORT(1,extent,(T))
128};
129
130} // namespace boost
131
132#include "boost/type_traits/detail/size_t_trait_undef.hpp"
133
134#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.