Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 90152a4860529aff7214be01cd22abd37012cd19)
+++ src/SymTab/Validate.cc	(revision d5916ce34e5508e6ffe903e16992dee102292838)
@@ -1333,8 +1333,15 @@
 	void FindSpecialDeclarations::previsit( FunctionDecl * funcDecl ) {
 		if ( ! dereferenceOperator ) {
-			if ( funcDecl->get_name() == "*?" && funcDecl->get_linkage() == LinkageSpec::Intrinsic ) {
-				FunctionType * ftype = funcDecl->get_functionType();
-				if ( ftype->get_parameters().size() == 1 && ftype->get_parameters().front()->get_type()->get_qualifiers() == Type::Qualifiers() ) {
-					dereferenceOperator = funcDecl;
+			// find and remember the intrinsic dereference operator for object pointers
+			if ( funcDecl->name == "*?" && funcDecl->linkage == LinkageSpec::Intrinsic ) {
+				FunctionType * ftype = funcDecl->type;
+				if ( ftype->parameters.size() == 1 ) {
+					PointerType * ptrType = strict_dynamic_cast<PointerType *>( ftype->parameters.front()->get_type() );
+					if ( ptrType->base->get_qualifiers() == Type::Qualifiers() ) {
+						TypeInstType * inst = dynamic_cast<TypeInstType *>( ptrType->base );
+						if ( inst && ! inst->get_isFtype() ) {
+							dereferenceOperator = funcDecl;
+						}
+					}
 				}
 			}
