Listing 1: Header file sized_types.h

#ifndef SIZED_TYPES_H
#define SIZED_TYPES_H
     
#include <limits>
#include "ctassert.h"
     
//BEGIN MACHINE-DEPENDENT PART
     
typedef unsigned char uint8;
typedef signed char int8;
typedef unsigned short uint16;
typedef short int16;
typedef unsigned uint32;
typedef int int32;
     
//END MACHINE-DEPENDENT PART
     
//Force compile-time error if the typedefs are inappropriate for 
//this platform.
     
namespace sized_integer_tests {
  using namespace std;
     
  ctassert<numeric_limits<int8>::is_integer> t1; 
  ctassert<numeric_limits<uint8>::is_integer> t2; 
  ctassert<numeric_limits<int16>::is_integer> t3; 
  ctassert<numeric_limits<uint16>::is_integer> t4; 
  ctassert<numeric_limits<int32>::is_integer> t5; 
  ctassert<numeric_limits<uint32>::is_integer> t6;
     
  ctassert<numeric_limits<int8>::is_signed> t7; 
  ctassert<numeric_limits<int16>::is_signed> t8; 
  ctassert<numeric_limits<int32>::is_signed> t9;
     
  ctassert<!numeric_limits<uint8>::is_signed> t10; 
  ctassert<!numeric_limits<uint16>::is_signed> t11; 
  ctassert<!numeric_limits<uint32>::is_signed> t12;
     
  ctassert<numeric_limits<int8>::radix == 2> t13; 
  ctassert<numeric_limits<uint8>::radix == 2> t14; 
  ctassert<numeric_limits<int16>::radix == 2> t15; 
  ctassert<numeric_limits<uint16>::radix == 2> t16; 
  ctassert<numeric_limits<int32>::radix == 2> t17; 
  ctassert<numeric_limits<uint32>::radix == 2> t18;
     
  ctassert<numeric_limits<int8>::digits == 7> t19; 
  ctassert<numeric_limits<uint8>::digits == 8> t20; 
  ctassert<numeric_limits<int16>::digits == 15> t21; 
  ctassert<numeric_limits<uint16>::digits == 16> t22; 
  ctassert<numeric_limits<int32>::digits == 31> t23; 
  ctassert<numeric_limits<uint32>::digits == 32> t24;
}
     
#endif
     
//End of File