pt.c (check_explicit_specialization): Copy TREE_PRIVATE and TREE_PROTECTED from the template being specialized.

* pt.c (check_explicit_specialization): Copy TREE_PRIVATE and
	TREE_PROTECTED from the template being specialized.

From-SVN: r39813
This commit is contained in:
Mark Mitchell 2001-02-18 00:29:00 +00:00 committed by Mark Mitchell
parent a714e5c5d3
commit c750255cac
3 changed files with 30 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2001-02-17 Mark Mitchell <mark@codesourcery.com>
* pt.c (check_explicit_specialization): Copy TREE_PRIVATE and
TREE_PROTECTED from the template being specialized.
2001-02-17 Jason Merrill <jason@redhat.com>
* decl2.c (build_artificial_parm): Set TREE_READONLY.

View File

@ -1662,6 +1662,11 @@ check_explicit_specialization (declarator, decl, template_count, flags)
DECL is specializing. */
copy_default_args_to_explicit_spec (decl);
/* This specialization has the same protection as the
template it specializes. */
TREE_PRIVATE (decl) = TREE_PRIVATE (gen_tmpl);
TREE_PROTECTED (decl) = TREE_PROTECTED (gen_tmpl);
/* Mangle the function name appropriately. Note that we do
not mangle specializations of non-template member
functions of template classes, e.g. with

View File

@ -0,0 +1,20 @@
// Build don't link:
// Origin: r.spatschek@fz-juelich.de
// Special g++ Options: -w
class A
{
private:
template <class T> void g(T t) {}
int i;
};
template <>
void A::g<int>(int t) { i = 1; } // ERROR - private
int main()
{
A a;
a.g<int>(0); // ERROR - private
}