namespace Xapian { namespace Internal { template < class T > class RefCntPtr { public: T *operator->() const; T *get() const; }; template < class T > inline T * RefCntPtr < T >::get() const {} } class iter { public: class Internal; Xapian::Internal::RefCntPtr < Internal > internal; }; bool operator == (const Xapian::iter &a, const Xapian::iter &b) { return (a.internal.get() == b.internal.get()); }; } bool equals(Xapian::iter const *self, Xapian::iter const &other) { return *self == other; } bool f() { Xapian::iter *arg1, *arg2; bool result; try { result = equals((Xapian::iter const *)arg1, (Xapian::iter const &)*arg2); } catch(...) {} return result; }