aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/decl.c4
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/var-templ23.C7
3 files changed, 14 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d3dbd67..6f300fb 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2015-04-01 Jason Merrill <jason@redhat.com>
+
+ PR c++/65625
+ * decl.c (make_typename_type): Handle seeing a variable template.
+
2015-04-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56100
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 31b8e0c..c4731ae2 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3480,9 +3480,9 @@ make_typename_type (tree context, tree name, enum tag_types tag_type,
if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
{
name = TREE_OPERAND (name, 0);
- if (TREE_CODE (name) == TEMPLATE_DECL)
+ if (DECL_TYPE_TEMPLATE_P (name))
name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
- else if (TREE_CODE (name) == OVERLOAD)
+ if (TREE_CODE (name) != IDENTIFIER_NODE)
{
if (complain & tf_error)
error ("%qD is not a type", name);
diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ23.C b/gcc/testsuite/g++.dg/cpp1y/var-templ23.C
new file mode 100644
index 0000000..a5b19d2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/var-templ23.C
@@ -0,0 +1,7 @@
+// PR c++/65625
+// { dg-do compile { target c++14 } }
+
+namespace std {
+ template <typename T> int declval;
+ typename std::declval<> d; // { dg-error "not a type" }
+}