diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index c350ebb0a799cef9eaab3219ff6e8bd42474167e..d47483dd4f207bc2d75e90dc33ef78a196b85c52 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -7316,7 +7316,7 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
   if (non_dep)
     expr = instantiate_non_dependent_expr_internal (expr, complain);
 
-  const bool val_dep_p = value_dependent_expression_p (expr);
+  bool val_dep_p = value_dependent_expression_p (expr);
   if (val_dep_p)
     expr = canonicalize_expr_argument (expr, complain);
   else
@@ -7357,6 +7357,8 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain)
 	  expr = maybe_constant_value (expr, NULL_TREE,
 				       /*manifestly_const_eval=*/true);
 	  expr = convert_from_reference (expr);
+	  /* EXPR may have become value-dependent.  */
+	  val_dep_p = value_dependent_expression_p (expr);
 	}
       else if (TYPE_PTR_OR_PTRMEM_P (type))
 	{
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-74.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-74.C
new file mode 100644
index 0000000000000000000000000000000000000000..8382d8563827a4eb73155bb452362d9a28a03fdc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-74.C
@@ -0,0 +1,9 @@
+// PR c++/104108
+// { dg-do compile { target c++11 } }
+
+template<template<const int&> class T>
+struct S {
+  static int m_parameter;
+  template<template<const int&> class TT>
+  using U = TT<m_parameter>;
+};