13   static const double A_MIN = -999.0;
 
   14   static const double A_MAX = +999.0;
 
   34     friend inline bool operator==(
const __A__& first, 
const __A__& second)
 
   36       return first.a == second.a;
 
   46     friend inline std::ostream& 
operator<<(std::ostream& out, 
const __A__& 
object)
 
   48       return out << 
object.a;
 
   51     static __A__ min() { 
return __A__(A_MIN); }
 
   52     static __A__ max() { 
return __A__(A_MAX); }
 
   66   inline void print(std::ostream& out, 
const char* name)
 
   71     out << setw(12) << left << name << ' ' << JLimits<T>::min() << 
' ' << JLimits<T>::max() << endl;
 
   74 #define PRINT(OUT, CLASS) print<CLASS>(OUT, #CLASS) 
   84 int main(
int argc, 
char**argv)
 
   92     JParser<> zap(
"Example program to test zero values of non-primitive data types.");
 
   98   catch(
const exception &error) {
 
   99     FATAL(error.what() << endl);
 
  108   PRINT(cout, 
long double);
 
  111   ASSERT(JLimits<size_t>::min() == numeric_limits<size_t>::min());
 
  112   ASSERT(JLimits<size_t>::max() == numeric_limits<size_t>::max());
 
  114   ASSERT(JLimits<double>::max() == numeric_limits<double>::max());
 
  115   ASSERT(JLimits<__A__> ::min() == A_MIN);
 
  116   ASSERT(JLimits<__A__> ::max() == A_MAX);