15   struct __B__ : 
public __A__ {};
 
   24   template<
class U, 
class V>
 
   25   inline void print(std::ostream& out, 
const char* uname, 
const char* vname)
 
   30     out << setw(36) << left << string(
"<") + string(uname) + string(
",") + string(vname) + string(
">");
 
   31     out << setw(4) << 
'.' << setw(8) << left << JConversion<U, V>::is_same;
 
   32     out << setw(4) << 
'.' << setw(8) << left << JConversion<U, V>::is_derived;
 
   45 #define PRINT(OUT, U, V)   print<U,V>(OUT, #U, #V) 
   54 int main(
int argc, 
char **argv)
 
   63     JParser<> zap(
"Example program to test class inspection.");
 
   69   catch(
const exception &error) {
 
   70     FATAL(error.what() << endl);
 
   75     cout << setw(36) << left << 
"name";
 
   76     cout << setw(12) << 
"  same  ";
 
   77     cout << setw(12) << 
" derived";
 
   82     PRINT(cout, __A__, __A__);
 
   83     PRINT(cout, __B__, __A__);
 
   84     PRINT(cout, __A__, __B__);
 
   85     PRINT(cout, __A__, __B__);
 
   88   ASSERT(( JConversion<__A__, __A__>::is_same));
 
   89   ASSERT(( JConversion<__B__, __A__>::is_derived));
 
   90   ASSERT((!JConversion<__A__, __B__>::is_same));
 
   91   ASSERT((!JConversion<__A__, __B__>::is_derived));