This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [var-template] Accept variable template declaration


Jason Merrill <jason@redhat.com> writes:

| On 03/29/2013 06:29 PM, Gabriel Dos Reis wrote:
| > +  if (TREE_CODE (t) != TEMPLATE_DECL
| > +      || !(DECL_NAMESPACE_SCOPE_P (t) || DECL_MEMBER_TEMPLATE_P (t)))
| 
| Why check the scope?

ah right, if it is a template the scope was already checked.

| > -  if (!TYPE_P (ctx) || !CLASSTYPE_TEMPLATE_INFO (ctx))
| > -    permerror (DECL_SOURCE_LOCATION (decl),
| > -	       "%qD is not a static data member of a class template", decl);
| > +  if (!TYPE_P (ctx) || !CLASSTYPE_TEMPLATE_INFO (ctx)) {
| > +    if (cxx_dialect < cxx1y)
| > +      permerror (DECL_SOURCE_LOCATION (decl),
| > +                 "%qD is not a static data member of a class template", decl);
| > +  }
| >    else if (template_header_count > wanted)
| 
| I think we still want to check for excess template headers.

right your are.

| > +      else if (VAR_P (decl)) {
| > +        if (!DECL_DECLARED_CONSTEXPR_P (decl))
| > +          error ("template declaration of non-constexpr variable %qD", decl);
| > +      }
| 
| Open brace should be on a line by itself.

oops, fixed.  Too many coding standards...

-- Gaby

2013-03-29  Gabriel Dos Reis  <gdr@integrable-solutions.net>
 
	* cp-tree.h (variable_template_p): Do not check scope.
	* pt.c (check_template_variable): Fix thinko from previous change.
	(push_template_decl_real): Fix formatting.

Index: gcc/cp/cp-tree.h
===================================================================
--- gcc/cp/cp-tree.h	(revision 197259)
+++ gcc/cp/cp-tree.h	(working copy)
@@ -4930,8 +4930,7 @@
 inline bool
 variable_template_p (tree t)
 {
-  if (TREE_CODE (t) != TEMPLATE_DECL
-      || !(DECL_NAMESPACE_SCOPE_P (t) || DECL_MEMBER_TEMPLATE_P (t)))
+  if (TREE_CODE (t) != TEMPLATE_DECL)
     return false;
   if (tree r = DECL_TEMPLATE_RESULT (t))
     return VAR_P (r);
Index: gcc/cp/pt.c
===================================================================
--- gcc/cp/pt.c	(revision 197259)
+++ gcc/cp/pt.c	(working copy)
@@ -2275,7 +2275,7 @@
       permerror (DECL_SOURCE_LOCATION (decl),
                  "%qD is not a static data member of a class template", decl);
   }
-  else if (template_header_count > wanted)
+  if (template_header_count > wanted)
     {
       pedwarn (DECL_SOURCE_LOCATION (decl), 0,
 	       "too many template headers for %D (should be %d)",
@@ -4618,10 +4618,11 @@
 	       && TYPE_DECL_ALIAS_P (decl))
 	/* alias-declaration */
 	gcc_assert (!DECL_ARTIFICIAL (decl));
-      else if (VAR_P (decl)) {
-        if (!DECL_DECLARED_CONSTEXPR_P (decl))
-          error ("template declaration of non-constexpr variable %qD", decl);
-      }
+      else if (VAR_P (decl))
+        {
+          if (!DECL_DECLARED_CONSTEXPR_P (decl))
+            error ("template declaration of non-constexpr variable %qD", decl);
+        }
       else
 	{
 	  error ("template declaration of %q#D", decl);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]