Jason Merrill <ja...@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 <g...@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);