Listing 1

class Field
{
/// \name Construction
private:
  this(char[] name, char[] value)
  in
  {
    assert(null !== name);
    assert(null !== value);
  }
  body
  {
    m_name  = name;
    m_value = value;
  }
/// \name Attributes
public:
  char[]  name()
  {
    return m_name;
  }
  char[]  value()
  {
    return m_value;
  }
  Record record()
  {
    return m_record;
  }
/// \name Comparison
public:
  int opCmp(Object rhs)
  {
    Field f = cast(Field)(rhs);
    if(null === f)
    {
      throw new InvalidTypeException("Attempt to compare a Field 
                                with an instance of another type");
    }
    return opCmp(f);
  }
public:

  int opCmp(Field rhs)
  {
    int res;
    if(this === rhs)
    {
      res = 0;
    }
    else
    {
      res = std.string.cmp(m_name, rhs.m_name);
      if(0 == res)
      {
        res = std.string.cmp(m_value, rhs.m_value);
      }
    }
    return res;
  }
// Members
private:
  char[]  m_name;
  char[]  m_value;
  Record  m_record;
}