summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/pt.c1
-rw-r--r--gcc/testsuite/g++.dg/template/unify3.C11
3 files changed, 16 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 49e771e6202..8016de51c5f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2001-11-02 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
+
+ * pt.c (unify): Handle SCOPE_REF.
+
2001-11-01 Jakub Jelinek <jakub@redhat.com>
* tree.c (cp_copy_res_decl_for_inlining): Adjust
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index a99b80d32ec..a2971f9ba26 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -8566,6 +8566,7 @@ unify (tparms, targs, parm, arg, strict)
switch (TREE_CODE (parm))
{
case TYPENAME_TYPE:
+ case SCOPE_REF:
case UNBOUND_CLASS_TEMPLATE:
/* In a type which contains a nested-name-specifier, template
argument values cannot be deduced for template parameters used
diff --git a/gcc/testsuite/g++.dg/template/unify3.C b/gcc/testsuite/g++.dg/template/unify3.C
new file mode 100644
index 00000000000..190a0cb95f7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/unify3.C
@@ -0,0 +1,11 @@
+// Test unifying SCOPE_REF.
+// Origin: Marc Duflot <m.duflot@ulg.ac.be>
+// { dg-do compile }
+
+template <int n> class A {};
+template <int m> class R {};
+
+template <int n> struct Trait { enum {m = n}; };
+
+template <int n> R<Trait<n>::m> f(A<n>);
+template <> R<1> f(A<1>) {return R<1>();}
OpenPOWER on IntegriCloud