2
#ifndef BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
3
#define BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED
5
// Copyright Aleksey Gurtovoy 2000-2004
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)
11
// See http://www.boost.org/libs/mpl for documentation.
13
// $Id: largest_int.hpp 49267 2008-10-11 06:19:02Z agurtovoy $
14
// $Date: 2008-10-11 02:19:02 -0400 (Sat, 11 Oct 2008) $
17
#include <boost/mpl/if.hpp>
18
#include <boost/mpl/int.hpp>
19
#include <boost/mpl/aux_/config/integral.hpp>
20
#include <boost/config.hpp>
22
namespace boost { namespace mpl { namespace aux {
24
template< typename T > struct integral_rank;
26
template<> struct integral_rank<bool> : int_<1> {};
27
template<> struct integral_rank<signed char> : int_<2> {};
28
template<> struct integral_rank<char> : int_<3> {};
29
template<> struct integral_rank<unsigned char> : int_<4> {};
30
#if !defined(BOOST_NO_INTRINSIC_WCHAR_T)
31
template<> struct integral_rank<wchar_t> : int_<5> {};
33
template<> struct integral_rank<short> : int_<6> {};
34
template<> struct integral_rank<unsigned short> : int_<7> {};
35
template<> struct integral_rank<int> : int_<8> {};
36
template<> struct integral_rank<unsigned int> : int_<9> {};
37
template<> struct integral_rank<long> : int_<10> {};
38
template<> struct integral_rank<unsigned long> : int_<11> {};
40
#if defined(BOOST_HAS_LONG_LONG)
41
template<> struct integral_rank<long_long_type> : int_<12> {};
42
template<> struct integral_rank<ulong_long_type>: int_<13> {};
45
template< typename T1, typename T2 > struct largest_int
46
#if !defined(BOOST_MPL_CFG_NO_NESTED_VALUE_ARITHMETIC)
48
( integral_rank<T1>::value >= integral_rank<T2>::value )
55
enum { rank1 = integral_rank<T1>::value };
56
enum { rank2 = integral_rank<T2>::value };
57
typedef typename if_c< (rank1 >= rank2),T1,T2 >::type type;
63
#endif // BOOST_MPL_AUX_LARGEST_INT_HPP_INCLUDED