--- /dev/null
+namespace x {
+ 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;
+ x::Internal::RefCntPtr < Internal > internal;
+ };
+ bool operator == (const x::iter &a, const x::iter &b) {
+ return a.internal.get() == b.internal.get();
+ }
+}
+
+bool equals(x::iter const *self, x::iter const &other)
+{
+ return *self == other;
+}
+
+bool f()
+{
+ x::iter * arg1, *arg2;
+ bool result;
+ try {
+ result = equals((x::iter const *)arg1, (x::iter const &)*arg2);
+ } catch (...) {}
+ return result;
+}