--- gcc/cp/error.c.jj	2010-06-20 16:36:49.000000000 +0200
+++ gcc/cp/error.c	2010-06-22 11:45:04.000000000 +0200
@@ -1759,7 +1759,9 @@ dump_expr (tree t, int flags)
 	if (TREE_CODE (fn) == OBJ_TYPE_REF)
 	  fn = resolve_virtual_fun_from_obj_type_ref (fn);
 
-	if (TREE_TYPE (fn) != NULL_TREE && NEXT_CODE (fn) == METHOD_TYPE)
+	if (TREE_TYPE (fn) != NULL_TREE
+	    && NEXT_CODE (fn) == METHOD_TYPE
+	    && call_expr_nargs (t))
 	  {
 	    tree ob = CALL_EXPR_ARG (t, 0);
 	    if (TREE_CODE (ob) == ADDR_EXPR)
--- gcc/testsuite/g++.dg/diagnostic/method1.C.jj	2010-06-22 11:51:31.000000000 +0200
+++ gcc/testsuite/g++.dg/diagnostic/method1.C	2010-06-22 11:56:40.000000000 +0200
@@ -0,0 +1,20 @@
+// PR c++/44627
+// { dg-do compile }
+
+struct A
+{
+  A *foo ();
+};
+
+template <class T>
+void
+bar ()
+{
+  A::foo ().anything;	// { dg-error "request for member" }
+}
+
+void
+baz ()
+{
+  bar <int> ();
+}
