mirror of
				https://github.com/boostorg/integer.git
				synced 2025-11-04 10:11:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<html>
 | 
						|
 | 
						|
<head>
 | 
						|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 | 
						|
 | 
						|
<title>integer_traits: Compile-Time Limits for Integral Types</title>
 | 
						|
</head>
 | 
						|
 | 
						|
<body bgcolor="#FFFFFF" text="#000000">
 | 
						|
 | 
						|
<h1><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center" width="277" height="86">Compile-Time Integral
 | 
						|
Type Limits</h1>
 | 
						|
 | 
						|
<p>
 | 
						|
The C++ Standard Library <limits> header supplies a class template
 | 
						|
numeric_limits<> with specializations for each fundamental
 | 
						|
type.</p>
 | 
						|
<p>
 | 
						|
For integer types, the interesting members of std::numeric_limits<> are:
 | 
						|
<pre>   static const bool is_specialized; // will be true for integers
 | 
						|
   static T min() throw();
 | 
						|
   static T max() throw();
 | 
						|
   static const int digits;     // for integers, # value bits
 | 
						|
   static const int digits10;     
 | 
						|
   static const bool is_signed;
 | 
						|
   static const bool is_integer; // will be true for integers</pre>
 | 
						|
For many uses, these are sufficient.  But min() and max() are problematical because they are not constant expressions
 | 
						|
(std::5.19), yet some usages require constant expressions.
 | 
						|
<p>
 | 
						|
The template class <code>integer_traits</code> addresses this
 | 
						|
problem.
 | 
						|
 | 
						|
 | 
						|
<h2>Header <code><a href="../../boost/integer_traits.hpp">integer_traits.hpp</a></code> Synopsis</h2>
 | 
						|
 | 
						|
<pre>namespace boost {
 | 
						|
  template<class T>
 | 
						|
  class integer_traits : public std::numeric_limits<T>
 | 
						|
  {
 | 
						|
    static const bool is_integral = false;
 | 
						|
  };
 | 
						|
 | 
						|
  // specializations for all integral types
 | 
						|
}</pre>
 | 
						|
 | 
						|
 | 
						|
<h2>Description</h2>
 | 
						|
 | 
						|
Template class <code>integer_traits</code> is derived from
 | 
						|
<code>std::numeric_limits</code>.  In general, it adds the single
 | 
						|
<code>bool</code> member <code>is_integral</code> with the
 | 
						|
compile-time constant value <code>false</code>.  However, for all
 | 
						|
integral types <code>T</code> (std::3.9.1/7 [basic.fundamental]),
 | 
						|
there are specializations provided with the following compile-time
 | 
						|
constants defined:
 | 
						|
<p>
 | 
						|
<table border=1>
 | 
						|
<tr><th>member</th><th>type</th><th>value</th></tr>
 | 
						|
<tr><td><code>is_integral</code></td><td>bool</td><td><code>true</code></td></tr>
 | 
						|
<tr><td><code>const_min</code></td><td><code>T</code></td><td>equivalent
 | 
						|
to <code>std::numeric_limits<T>::min()</code></td></tr>
 | 
						|
<tr><td><code>const_max</code></td><td><code>T</code></td><td>equivalent
 | 
						|
to <code>std::numeric_limits<T>::max()</code></td></tr>
 | 
						|
</table>
 | 
						|
 | 
						|
<p>
 | 
						|
 | 
						|
<em>Note:</em> A flag <code>is_integral</code> is provided, because a
 | 
						|
user-defined integer class should specialize
 | 
						|
<code>std::numeric_limits<>::is_integer = true</code>,
 | 
						|
nonetheless compile-time constants <code>const_min</code> and
 | 
						|
<code>const_max</code> cannot be provided for that user-defined class.
 | 
						|
 | 
						|
<h2>
 | 
						|
 | 
						|
Test Program</h2>
 | 
						|
 | 
						|
<p>
 | 
						|
 | 
						|
The program <code><a href="integer_traits_test.cpp">integer_traits_test.cpp</a></code>
 | 
						|
exercises the <code>integer_traits</code> class.
 | 
						|
 | 
						|
<h2>Acknowledgements</h2>
 | 
						|
 | 
						|
Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers discussed the integer
 | 
						|
traits idea on the boost mailing list in August 1999.
 | 
						|
<hr>
 | 
						|
<a href="../../people/jens_maurer.htm">
 | 
						|
Jens Maurer</a>, 2000-02-20 |