diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 3e5f0104056ad385d53ab02e5a2bdb465f3490b9..a668825b5f9227f0dee018f4be67d4a15ffa51d6 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -27959,9 +27959,7 @@ value_dependent_expression_p (tree expression)
     case VAR_DECL:
        /* A constant with literal type and is initialized
 	  with an expression that is value-dependent.  */
-      if (DECL_DEPENDENT_INIT_P (expression)
-	  /* FIXME cp_finish_decl doesn't fold reference initializers.  */
-	  || TYPE_REF_P (TREE_TYPE (expression)))
+      if (DECL_DEPENDENT_INIT_P (expression))
 	return true;
       if (DECL_HAS_VALUE_EXPR_P (expression))
 	{
@@ -27976,6 +27974,9 @@ value_dependent_expression_p (tree expression)
 		  && value_expr == error_mark_node))
 	    return true;
 	}
+      else if (TYPE_REF_P (TREE_TYPE (expression)))
+	/* FIXME cp_finish_decl doesn't fold reference initializers.  */
+	return true;
       return false;
 
     case DYNAMIC_CAST_EXPR:
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11a.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11a.C
new file mode 100644
index 0000000000000000000000000000000000000000..7fc3d48a8ddbddd3104d6e25e4de9e0bbb596957
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const11a.C
@@ -0,0 +1,21 @@
+// PR c++/108975
+// A version of lambda-const11.C using a generic lambda.
+// { dg-do compile { target c++14 } }
+
+template<int> void g();
+template<int> struct A { };
+
+template<class T>
+void f() {
+  constexpr int dim = 1;
+  auto l = [&](auto) {
+    int n[dim * 1];
+    using ty1 = decltype(g<dim * 2>());
+    using ty2 = A<dim * 3>;
+  };
+  l(0);
+  // In f<int>, we shouldn't actually capture dim.
+  static_assert (sizeof(l) == 1, "");
+}
+
+template void f<int>();