Index: constraint.cc
===================================================================
--- constraint.cc	(revision 203251)
+++ constraint.cc	(working copy)
@@ -735,10 +735,14 @@ finish_constexpr_expr (tree expr)
 // FN, is admissable. This is the case only when the declaration depends 
 // on template parameters and does not declare a specialization.
 void
-check_constrained_friend (tree fn)
+check_constrained_friend (tree fn, tree reqs)
 {
   gcc_assert (TREE_CODE (fn) == FUNCTION_DECL);
 
+  // If there are not constraints, this cannot be an error.
+  if (!reqs)
+    return;
+
   // Constrained friend functions that don't depend on template
   // arguments are effectively meaningless.
   tree parms = DECL_ARGUMENTS (fn);
Index: parser.c
===================================================================
--- parser.c	(revision 203251)
+++ parser.c	(working copy)
@@ -20144,7 +20144,7 @@ cp_parser_member_declaration (cp_parser*
 		    finish_member_declaration (decl);
 
                   if (friend_p)
-                     check_constrained_friend (decl);
+                     check_constrained_friend (decl, current_template_reqs);
 
 		  /* Peek at the next token.  */
 		  token = cp_lexer_peek_token (parser->lexer);
Index: cp-tree.h
===================================================================
--- cp-tree.h	(revision 203251)
+++ cp-tree.h	(working copy)
@@ -6274,7 +6274,7 @@ extern tree finish_validexpr_expr
 extern tree finish_validtype_expr               (tree);
 extern tree finish_constexpr_expr               (tree);
 
-extern void check_constrained_friend            (tree);
+extern void check_constrained_friend            (tree, tree);
 
 extern tree tsubst_requires_expr                (tree, tree, tsubst_flags_t, tree);
 extern tree tsubst_validexpr_expr               (tree, tree, tree);
