Index: src/SymTab/Autogen.h
===================================================================
--- src/SymTab/Autogen.h	(revision 49148d54fdd9344fe37f068726dd2c71ab7782db)
+++ src/SymTab/Autogen.h	(revision 4fbdfae0bcc812e14e8400b3c8e8fdba44da96c8)
@@ -34,4 +34,8 @@
 	/// such as in determining array dimension type
 	extern Type * SizeType;
+
+	/// intrinsic dereference operator for unqualified types - set when *? function is seen in FindSpecialDeclarations.
+	/// Useful for creating dereference ApplicationExprs without a full resolver pass.
+	extern FunctionDecl * dereferenceOperator;
 
 	/// inserts into out a generated call expression to function fname with arguments dstParam and srcParam. Intended to be used with generated ?=?, ?{}, and ^?{} calls.
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 49148d54fdd9344fe37f068726dd2c71ab7782db)
+++ src/SymTab/Validate.cc	(revision 4fbdfae0bcc812e14e8400b3c8e8fdba44da96c8)
@@ -237,4 +237,10 @@
 	};
 
+
+	FunctionDecl * dereferenceOperator = nullptr;
+	struct FindSpecialDeclarations final {
+		void previsit( FunctionDecl * funcDecl );
+	};
+
 	void validate( std::list< Declaration * > &translationUnit, bool doDebug ) {
 		PassVisitor<EnumAndPointerDecay> epc;
@@ -243,4 +249,5 @@
 		PassVisitor<CompoundLiteral> compoundliteral;
 		PassVisitor<ValidateGenericParameters> genericParams;
+		PassVisitor<FindSpecialDeclarations> finder;
 
 		EliminateTypedef::eliminateTypedef( translationUnit );
@@ -259,4 +266,5 @@
 		acceptAll( translationUnit, fpd );
 		ArrayLength::computeLength( translationUnit );
+		acceptAll( translationUnit, finder );
 	}
 
@@ -943,4 +951,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;
+				}
+			}
+		}
+	}
 } // namespace SymTab
 
