return true;
 }
 
-std::ostream & OID::operator<<(std::ostream & stream) const
+std::ostream & operator<<(std::ostream & stream, const OID & oid)
 {
-for (size_t i = 0; i < arcs.size(); ++i)
-    stream << "." << arcs[i];
+for (size_t i = 0; i < oid.arcs.size(); ++i)
+    stream << "." << oid.arcs[i];
 return stream;
 }
 
 
         OID & operator=(const OID & rvalue);
         bool operator==(const OID & rvalue) const;
+        bool operator!=(const OID & rvalue) const { return !operator==(rvalue); }
         bool operator<(const OID & rvalue) const;
+        bool operator>(const OID & rvalue) const
+        { return !operator==(rvalue) && !operator<(rvalue); }
 
-        std::ostream & operator<<(std::ostream & stream) const;
+        friend std::ostream & operator<<(std::ostream & stream, const OID & oid);
 
     private:
         std::vector<unsigned> arcs;