22   inline void print(std::ostream& out, 
const char* name)
 
   27     out << setw(36) << left << name;
 
   28     out << setw(4) << 
'.' << setw(8) << left << JClass<T>::is_primitive;
 
   29     out << setw(4) << 
'.' << setw(8) << left << JClass<T>::is_pointer;
 
   30     out << setw(4) << 
'.' << setw(8) << left << JClass<T>::is_reference;
 
   31     out << setw(4) << 
'.' << setw(8) << left << JClass<T>::is_constant;
 
   43 #define PRINT(OUT, T)   print<T>(OUT, #T) 
   52 int main(
int argc, 
char **argv)
 
   61     JParser<> zap(
"Example program to test class inspection.");
 
   67   catch(
const exception &error) {
 
   68     FATAL(error.what() << endl);
 
   73     cout << setw(36) << left << 
"name";
 
   74     cout << setw(12) << 
"primitive";
 
   75     cout << setw(12) << 
" pointer";
 
   76     cout << setw(12) << 
"reference";
 
   77     cout << setw(12) << 
"constant";
 
   84     PRINT(cout, 
const int*);
 
   91   ASSERT( JClass<int>::is_primitive);
 
   92   ASSERT(!JClass<int>::is_pointer);
 
   93   ASSERT(!JClass<int>::is_reference);
 
   94   ASSERT(!JClass<int>::is_constant);
 
   96   ASSERT( JClass<int&>::is_primitive);
 
   97   ASSERT(!JClass<int&>::is_pointer);
 
   98   ASSERT( JClass<int&>::is_reference);
 
   99   ASSERT(!JClass<int&>::is_constant);
 
  101   ASSERT( JClass<const int*>::is_primitive);
 
  102   ASSERT( JClass<const int*>::is_pointer);
 
  103   ASSERT(!JClass<const int*>::is_reference);
 
  104   ASSERT( JClass<const int*>::is_constant);
 
  106   ASSERT(!JClass<__A__>::is_primitive);
 
  107   ASSERT(!JClass<__A__>::is_pointer);
 
  108   ASSERT(!JClass<__A__>::is_reference);
 
  109   ASSERT(!JClass<__A__>::is_constant);
 
  114   ASSERT(is_iterator<__A__> ::value == 
false);
 
  115   ASSERT(is_iterator<__A__&>::value == 
false);
 
  116   ASSERT(is_iterator<__A__*>::value == 
true);