diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a33b649187639183f2a01775f570aa259d60e6eb..df2e0b2fabf7ef881b93f6f84b2007141f087041 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2015-07-13  Patrick Palka  <ppalka@gcc.gnu.org>
+
+	PR c++/65186
+	* pt.c (invalid_nontype_parm_type_p): Accept a bound template
+	template parm type under C++11 and later.
+
 2015-07-12  Aldy Hernandez  <aldyh@redhat.com>
 
 	* call.c: Fix double word typos.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 064cbfdc4ecaef4961523716395b348b3bb18ad0..2097963ed693eaa8873809805f21e9056e51d46c 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -20996,6 +20996,11 @@ invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
     return 0;
   else if (TREE_CODE (type) == NULLPTR_TYPE)
     return 0;
+  /* A bound template template parm could later be instantiated to have a valid
+     nontype parm type via an alias template.  */
+  else if (cxx_dialect >= cxx11
+	   && TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
+    return 0;
 
   if (complain & tf_error)
     {
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 071e7c4e08fa10604d71af10eaf0c5f6a3e49b79..2e32e14527e5b753a5401771dd806c335f724aa7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-07-13  Patrick Palka  <ppalka@gcc.gnu.org>
+
+	PR c++/65186
+	* g++.dg/template/pr65186.C: New test.
+
 2015-07-13  Mantas Mikaitis  <mantas.mikaitis@arm.com>
 
 	* gcc.target/arm/macro_defs0.c: Add directive to skip
diff --git a/gcc/testsuite/g++.dg/template/pr65186.C b/gcc/testsuite/g++.dg/template/pr65186.C
new file mode 100644
index 0000000000000000000000000000000000000000..f5e81e37ebab51756dddebec87f17bc5d3876437
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr65186.C
@@ -0,0 +1,26 @@
+// { dg-do compile { target c++11 } }
+// PR c++/65186
+
+template<typename A, A x, A y>
+using Id = int;
+
+template<
+  typename A,
+  A x,
+  A y,
+  Id<A, x, y> p,
+  template<A a, A b, Id<A, a, b>> class C,
+  C<x, x, x> // { dg-bogus "not a valid type" }
+> using J = C<x, y, p>;
+
+
+template<class A>
+using Z = A;
+
+template<
+  template <class> class A,
+  A<int> B // { dg-bogus "not a valid type" }
+>
+struct C { };
+
+C<Z, 5> a;