decl.c (start_decl): An explicit specialization of a static data member is only a definition if...

* decl.c (start_decl): An explicit specialization of a static data
	member is only a definition if it has an initializer.

From-SVN: r23847
This commit is contained in:
Jason Merrill 1998-11-25 01:59:30 +00:00 committed by Jason Merrill
parent f3cd6f7e12
commit 84e6233f15
2 changed files with 14 additions and 1 deletions

View File

@ -1,5 +1,8 @@
1998-11-24 Jason Merrill <jason@yorick.cygnus.com>
* decl.c (start_decl): An explicit specialization of a static data
member is only a definition if it has an initializer.
* except.c (expand_throw): Use cp_finish_decl for the throw temp.
* cvt.c (build_up_reference): Pass DIRECT_BIND down into
cp_finish_decl.

View File

@ -6770,7 +6770,17 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes)
DECL_IN_AGGR_P (decl) = 0;
if ((DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
|| CLASSTYPE_USE_TEMPLATE (context))
SET_DECL_TEMPLATE_SPECIALIZATION (decl);
{
SET_DECL_TEMPLATE_SPECIALIZATION (decl);
/* [temp.expl.spec] An explicit specialization of a static data
member of a template is a definition if the declaration
includes an initializer; otherwise, it is a declaration.
We check for processing_specialization so this only applies
to the new specialization syntax. */
if (DECL_INITIAL (decl) == NULL_TREE && processing_specialization)
DECL_EXTERNAL (decl) = 1;
}
if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl))
cp_pedwarn ("declaration of `%#D' outside of class is not definition",