2011/12/21 Jason Merrill <ja...@redhat.com>:
> This seems problematic to me; it could be that a dependent scope ends up
> matching a non-dependent base in the end, i.e.
>
> struct A { int x; };
>
> template <class T>
> struct B: A
> {
>  using T::x;
> };
>
> B<A> b;

Very nice indeed, I hadn't thought of that.

> this code is silly, but I think well-formed, and that your patch will break
> it.
>
> I think that just changing dependent_type_p (scope) to dependent_scope_p
> (scope) will have the desired effect on this testcase.

Yes, it works. Tested x86_64-unknown-linux-gnu, OK to commit ?

gcc/testsuite/ChangeLog

2011-12-27  Fabien Chêne  <fab...@gcc.gnu.org>

        PR c++/23211
        * g++.dg/template/using18.C: New.
        * g++.dg/template/using19.C: New.
        * g++.dg/template/nested3.C: Remove dg-message at instantiation.
        * g++.dg/template/crash13.C: Likewise.

gcc/cp/ChangeLog

2011-12-27  Fabien Chêne  <fab...@gcc.gnu.org>

        PR c++/23211
        * name-lookup.c (do_class_using_decl): Check that a non-dependent
        nested-name-specifier of a class-scope using declaration refers to
        a base, even if the current scope is dependent.
        * parser.c (cp_parser_using_declaration): Set
        USING_DECL_TYPENAME_P to 1 if the DECL is not null. Re-indent a
        'else' close to the prior modification.

-- 
Fabien

Attachment: 23211.patch
Description: Binary data

Reply via email to