Back to slide -- Keyboard shortcut: 'u'  previous -- Keyboard shortcut: 'p'  next -- Keyboard shortcut: 'n'          metaprogramming/typefunctions/int-types-1.cc - Second version of type function - embellished syntax of the type function.Lecture 6 - slide 37 : 40
Program 2

// Simplifying the use of Select via use of a template alias (4ed page 694).


#include <iostream>
#include <string>
#include "select-stuff.cc"

// Integer<N>::type is now defined as an integer type of N bytes:    (4ed, page 782)
template<int N>
struct Integer{
  using Error = void;
  using type = Select<N, 
                       Error,           // 0 selects Error (void)
                       signed char,     // 1 selects singed char
                       short int,       // 2 selects short int
                       Error            // 3 selects Error (void)
                     >;
                                                          
};

// Embellish the notation  Integer<N>::type  to Integer_of_size<N>  - made by use of a template alias (4ed, 23.6).
template<int M>
using Integer_of_byte_size = typename Integer<M>::type;   


int main(){
  using namespace std;

  Integer_of_byte_size<1> i = 65;    // similar to:   unsigned char i = 10;  // 'A'
  Integer_of_byte_size<2> j = 66;    // similar to:   short int j = 8;

  cout << "i: " << i << " of size: " << sizeof(i) << endl;   // i: A of size 1
  cout << "j: " << j << " of size: " << sizeof(j) << endl;   // j: 66 of size 2
}