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

Revision 857, 2.5 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_RANK_HPP_INCLUDED
11#define BOOST_TT_RANK_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 rank_imp
22{
23   BOOST_STATIC_CONSTANT(std::size_t, value = N);
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 rank_imp<T[R], N>
28{
29   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
30};
31
32template <class T, std::size_t R, std::size_t N>
33struct rank_imp<T const[R], N>
34{
35   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
36};
37
38template <class T, std::size_t R, std::size_t N>
39struct rank_imp<T volatile[R], N>
40{
41   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
42};
43
44template <class T, std::size_t R, std::size_t N>
45struct rank_imp<T const volatile[R], N>
46{
47   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
48};
49
50#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) &&  !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
51template <class T, std::size_t N>
52struct rank_imp<T[], N>
53{
54   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
55};
56template <class T, std::size_t N>
57struct rank_imp<T const[], N>
58{
59   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
60};
61template <class T, std::size_t N>
62struct rank_imp<T volatile[], N>
63{
64   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
65};
66template <class T, std::size_t N>
67struct rank_imp<T const volatile[], N>
68{
69   BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
70};
71#endif
72#endif
73}
74
75BOOST_TT_AUX_SIZE_T_TRAIT_DEF1(rank,T,(::boost::detail::rank_imp<T,0>::value))
76
77} // namespace boost
78
79#include "boost/type_traits/detail/size_t_trait_undef.hpp"
80
81#endif // BOOST_TT_IS_MEMBER_FUNCTION_POINTER_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.