107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								//  (C) Copyright John Maddock 2015. 
							 | 
						||
| 
								 | 
							
								//  Use, modification and distribution are subject to the 
							 | 
						||
| 
								 | 
							
								//  Boost Software License, Version 1.0. (See accompanying file 
							 | 
						||
| 
								 | 
							
								//  LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
							 | 
						||
| 
								 | 
							
								#define BOOST_TYPE_TRAITS_INTEGRAL_CONSTANT_HPP
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <boost/config.hpp>
							 | 
						||
| 
								 | 
							
								#include <boost/detail/workaround.hpp>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
							 | 
						||
| 
								 | 
							
								   || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
							 | 
						||
| 
								 | 
							
								   || BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) \
							 | 
						||
| 
								 | 
							
								   || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3202)) \
							 | 
						||
| 
								 | 
							
								   || BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, BOOST_TESTED_AT(810)) )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{
							 | 
						||
| 
								 | 
							
								   namespace mpl
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      template <bool B> struct bool_;
							 | 
						||
| 
								 | 
							
								      template <class I, I val> struct integral_c;
							 | 
						||
| 
								 | 
							
								      struct integral_c_tag;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#else
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace mpl_{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <bool B> struct bool_;
							 | 
						||
| 
								 | 
							
								   template <class I, I val> struct integral_c;
							 | 
						||
| 
								 | 
							
								   struct integral_c_tag;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   namespace mpl
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      using ::mpl_::bool_;
							 | 
						||
| 
								 | 
							
								      using ::mpl_::integral_c;
							 | 
						||
| 
								 | 
							
								      using ::mpl_::integral_c_tag;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace boost{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T, T val>
							 | 
						||
| 
								 | 
							
								   struct integral_constant
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      typedef mpl::integral_c_tag tag;
							 | 
						||
| 
								 | 
							
								      typedef T value_type;
							 | 
						||
| 
								 | 
							
								      typedef integral_constant<T, val> type;
							 | 
						||
| 
								 | 
							
								      static const T value = val;
							 | 
						||
| 
								 | 
							
								      //
							 | 
						||
| 
								 | 
							
								      // This helper function is just to disable type-punning 
							 | 
						||
| 
								 | 
							
								      // warnings from GCC:
							 | 
						||
| 
								 | 
							
								      //
							 | 
						||
| 
								 | 
							
								      template <class U>
							 | 
						||
| 
								 | 
							
								      static U& dereference(U* p) { return *p; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      operator const mpl::integral_c<T, val>& ()const
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         static const char data[sizeof(long)] = { 0 };
							 | 
						||
| 
								 | 
							
								         return dereference(reinterpret_cast<const mpl::integral_c<T, val>*>(&data));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      BOOST_CONSTEXPR operator T()const { return val; }
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <class T, T val>
							 | 
						||
| 
								 | 
							
								   T const integral_constant<T, val>::value;
							 | 
						||
| 
								 | 
							
								      
							 | 
						||
| 
								 | 
							
								   template <bool val>
							 | 
						||
| 
								 | 
							
								   struct integral_constant<bool, val>
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      typedef mpl::integral_c_tag tag;
							 | 
						||
| 
								 | 
							
								      typedef bool value_type;
							 | 
						||
| 
								 | 
							
								      typedef integral_constant<bool, val> type;
							 | 
						||
| 
								 | 
							
								      static const bool value = val;
							 | 
						||
| 
								 | 
							
								      //
							 | 
						||
| 
								 | 
							
								      // This helper function is just to disable type-punning 
							 | 
						||
| 
								 | 
							
								      // warnings from GCC:
							 | 
						||
| 
								 | 
							
								      //
							 | 
						||
| 
								 | 
							
								      template <class T>
							 | 
						||
| 
								 | 
							
								      static T& dereference(T* p) { return *p; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      operator const mpl::bool_<val>& ()const
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         static const char data = 0;
							 | 
						||
| 
								 | 
							
								         return dereference(reinterpret_cast<const mpl::bool_<val>*>(&data));
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      BOOST_CONSTEXPR operator bool()const { return val; }
							 | 
						||
| 
								 | 
							
								   };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   template <bool val>
							 | 
						||
| 
								 | 
							
								   bool const integral_constant<bool, val>::value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   typedef integral_constant<bool, true> true_type;
							 | 
						||
| 
								 | 
							
								   typedef integral_constant<bool, false> false_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif
							 |