Commit b7fc8b57 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

parser.c (cp_parser_explicit_instantiation): Restore old access before template instantiation.

	* parser.c (cp_parser_explicit_instantiation): Restore old
	access before template instantiation.

	* g++.dg/template/access11.C: New test.

From-SVN: r67166
parent c7684ffe
2003-05-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* parser.c (cp_parser_explicit_instantiation): Restore old
access before template instantiation.
2003-05-23 Geoffrey Keating <geoffk@apple.com>
* lang-specs.h: Use -o to specify preprocessor's output file.
......
......@@ -8318,6 +8318,9 @@ cp_parser_explicit_instantiation (cp_parser* parser)
tree type;
type = check_tag_decl (decl_specifiers);
/* Turn access control back on for names used during
template instantiation. */
pop_deferring_access_checks ();
if (type)
do_type_instantiation (type, extension_specifier, /*complain=*/1);
}
......@@ -8332,13 +8335,14 @@ cp_parser_explicit_instantiation (cp_parser* parser)
/*ctor_dtor_or_conv_p=*/NULL);
decl = grokdeclarator (declarator, decl_specifiers,
NORMAL, 0, NULL);
/* Turn access control back on for names used during
template instantiation. */
pop_deferring_access_checks ();
/* Do the explicit instantiation. */
do_decl_instantiation (decl, extension_specifier);
}
/* We're done with the instantiation. */
end_explicit_instantiation ();
/* Turn access control back on. */
pop_deferring_access_checks ();
cp_parser_consume_semicolon_at_end_of_statement (parser);
}
......
2003-05-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* g++.dg/template/access11.C: New test.
2003-05-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/10849
* g++.dg/template/access10.C: New test.
......
// Copyright (C) 2003 Free Software Foundation
// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
// { dg-do compile }
// Access checking during explicit instantiation.
class A {
typedef int X; // { dg-error "private" }
};
class X {
private:
template <typename T> struct Y;
};
template <> struct X::Y<int> {
A::X x; // { dg-error "this context" }
};
template <typename T> struct X::Y {
typename T::X x; // { dg-error "this context" }
};
template struct X::Y<A>; // { dg-error "instantiated" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment