1 | // (C) Copyright John Maddock 2005. |
2 | // Use, modification and distribution are subject to the |
3 | // Boost Software License, Version 1.0. (See accompanying file |
4 | // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
5 | |
6 | #ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP |
7 | #define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP |
8 | |
9 | #include <boost/config.hpp> |
10 | #include <boost/mpl/bool.hpp> |
11 | #include <boost/mpl/integral_c.hpp> |
12 | |
13 | namespace boost{ |
14 | |
15 | #if defined(BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS) || defined(__BORLANDC__) |
16 | template <class T, int val> |
17 | #else |
18 | template <class T, T val> |
19 | #endif |
20 | struct integral_constant : public mpl::integral_c<T, val> |
21 | { |
22 | typedef integral_constant<T,val> type; |
23 | }; |
24 | |
25 | template<> struct integral_constant<bool,true> : public mpl::true_ |
26 | { |
27 | typedef integral_constant<bool,true> type; |
28 | }; |
29 | template<> struct integral_constant<bool,false> : public mpl::false_ |
30 | { |
31 | typedef integral_constant<bool,false> type; |
32 | }; |
33 | |
34 | typedef integral_constant<bool,true> true_type; |
35 | typedef integral_constant<bool,false> false_type; |
36 | |
37 | } |
38 | |
39 | #endif |
40 | |