re PR c++/17154 (Using declaration of function name ignored inside partial specialization of template class)

PR c++/17154
	* search.c (lookup_field_1): Handle using declaration in
	class template partial specialization.

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

From-SVN: r92994
This commit is contained in:
Kriang Lerdsuwanakij 2005-01-06 16:04:05 +00:00 committed by Kriang Lerdsuwanakij
parent 23ff7e2d27
commit 023458fab2
4 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/17154
* search.c (lookup_field_1): Handle using declaration in
class template partial specialization.
2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/19258

View File

@ -1,7 +1,7 @@
/* Breadth-first and depth-first routines for
searching multiple-inheritance lattice for GNU C++.
Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GCC.
@ -470,13 +470,10 @@ lookup_field_1 (tree type, tree name, bool want_type)
the compiler cannot handle that. Once the class is
defined, USING_DECLs are purged from TYPE_FIELDS; see
handle_using_decl. However, we make special efforts to
make using-declarations in template classes work
correctly. */
if (CLASSTYPE_TEMPLATE_INFO (type)
&& !CLASSTYPE_USE_TEMPLATE (type)
&& !TREE_TYPE (field))
;
else
make using-declarations in class templates and class
template partial specializations work correctly noticing
that dependent USING_DECL's do not have TREE_TYPE set. */
if (TREE_TYPE (field))
continue;
}

View File

@ -1,3 +1,8 @@
2004-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/17154
* g++.dg/template/using9.C: New test.
2005-01-06 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/19258

View File

@ -0,0 +1,12 @@
// { dg-do compile }
// Origin: stefaandr@hotmail.com
// PR c++/17154: Using declaration in partial class template specialization.
template <int numrows, class T> struct A { void test_A() {}; };
template <int numrows, class T> struct B {};
template <class T> struct B <3, T> : public A <3, T> {
using A <3, T>::test_A;
void test_B_spec() { test_A(); };
};