Improve diagnostic for redundant template arguments in declaration.
authorJason Merrill <jason@redhat.com>
Mon, 18 Feb 2019 21:35:48 +0000 (16:35 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 18 Feb 2019 21:35:48 +0000 (16:35 -0500)
* pt.c (check_explicit_specialization): If the declarator is a
template-id, only check whether the arguments are dependent.

From-SVN: r268997

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/g++.old-deja/g++.robertl/eb82.C

index d820e94109329035e3a62f3607cef4edd67c6c2c..33a1ca24c9fd8ebb7a2c192030a7837d5aab37ec 100644 (file)
@@ -1,5 +1,8 @@
 2019-02-18  Jason Merrill  <jason@redhat.com>
 
+       * pt.c (check_explicit_specialization): If the declarator is a
+       template-id, only check whether the arguments are dependent.
+
        Improve duplicate [[likely]] diagnostic.
        * parser.c (cp_parser_statement): Make attrs_loc a range.  Pass it
        to process_stmt_hotness_attribute.
index 48cbf3d9892c2e42a7265ac673bd13518820aeac..d8be92ddca49a72f4746b39514609aa48e0da8d5 100644 (file)
@@ -2849,7 +2849,7 @@ check_explicit_specialization (tree declarator,
          /* This case handles bogus declarations like template <>
             template <class T> void f<int>(); */
 
-         if (!uses_template_parms (declarator))
+         if (!uses_template_parms (TREE_OPERAND (declarator, 1)))
            error ("template-id %qD in declaration of primary template",
                   declarator);
          else if (variable_template_p (TREE_OPERAND (declarator, 0)))
index fc2bf7866fe60c9f7a2559e8eae3dafd61892629..d4c5985cd8c86e82d3b7a21cc07f74995bf5ec34 100644 (file)
@@ -2,7 +2,8 @@
 #include <stdio.h>
 
 template <int n1>
-double val <int> () // { dg-error "" } bogus code
+double val <int> () // { dg-error "expected" "" { target c++17_down } } bogus code
+// { dg-error "template-id .val<int>. in declaration of primary template" "" { target c++2a } .-1 }
 {                          
    return (double) n1;
 }