* pt.c (unify): Handle SCOPE_REF.
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
Fri, 2 Nov 2001 14:58:55 +0000 (14:58 +0000)
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Fri, 2 Nov 2001 14:58:55 +0000 (14:58 +0000)
From-SVN: r46715

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.dg/template/unify3.C [new file with mode: 0644]

index 49e771e6202a1f398908563ee39d34ba5d6ae8e7..8016de51c5f4128bcf4a488a2ffc57ae7497a360 100644 (file)
@@ -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
index a99b80d32ec8bbbb7468581cd1f8b0a9e7fc127f..a2971f9ba2677064d211d0b78a1375bcb02d8d8c 100644 (file)
@@ -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 (file)
index 0000000..190a0cb
--- /dev/null
@@ -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>();}