mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 14:50:57 +08:00
re PR c++/37140 (type inherited from base class not recognized)
2014-02-02 Fabien Chene <fabien@gcc.gnu.org> PR c++/37140 * parser.c (cp_parser_nonclass_name): Call strip_using_decl and move the code handling dependent USING_DECLs... * name-lookup.c (strip_using_decl): ...Here. 2014-02-02 Fabien Chene <fabien@gcc.gnu.org> PR c++/37140 * g++.dg/template/using27.C: New. * g++.dg/template/using28.C: New. * g++.dg/template/using29.C: New. From-SVN: r207407
This commit is contained in:
parent
2ace77c21a
commit
7f82286eb6
@ -406,7 +406,8 @@ pop_bindings_and_leave_scope (void)
|
||||
leave_scope ();
|
||||
}
|
||||
|
||||
/* Strip non dependent using declarations. */
|
||||
/* Strip non dependent using declarations. If DECL is dependent,
|
||||
surreptitiously create a typename_type and return it. */
|
||||
|
||||
tree
|
||||
strip_using_decl (tree decl)
|
||||
@ -416,6 +417,23 @@ strip_using_decl (tree decl)
|
||||
|
||||
while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
|
||||
decl = USING_DECL_DECLS (decl);
|
||||
|
||||
if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
|
||||
&& USING_DECL_TYPENAME_P (decl))
|
||||
{
|
||||
/* We have found a type introduced by a using
|
||||
declaration at class scope that refers to a dependent
|
||||
type.
|
||||
|
||||
using typename :: [opt] nested-name-specifier unqualified-id ;
|
||||
*/
|
||||
decl = make_typename_type (TREE_TYPE (decl),
|
||||
DECL_NAME (decl),
|
||||
typename_type, tf_error);
|
||||
if (decl != error_mark_node)
|
||||
decl = TYPE_NAME (decl);
|
||||
}
|
||||
|
||||
return decl;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user