https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66475

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |7.0
         Resolution|---                         |FIXED
             Status|NEW                         |RESOLVED

--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Fixed by r243624:

    re PR c++/69481 (ICE with C++11 alias using with templates)

            cp/
            PR c++/69481
            * cp-tree.h (TYPE_TEMPLATE_INFO): Remove alias type checking.
            (TYPE_ALIAS_TEMPLATE_INFO): New.
            (TYPE_TEMPLATE_INFO_MAYBE_ALIAS): New.  Use those macros.
            * error.c (dump_alias_template_specialization): Adjust.
            * pt.c (maybe_process_partial_specialization)
            iterative_has_template_arg, find_parameter_packs_r,
            alias_template_specialization_p, dependent_alias_template_spec_p,
            get_underlying_template, lookup_template_class_1, unify): Adjust
            template using decl access.

            testsuite/
            PR c++/69481
            * g++.dg/cpp0x/pr69481.C: New.


Since GCC 7.1 we print:

66475.cc:19:11: error: 'using Base = struct Foo<int>' is private within this
context
 Bar<int>::Base x; // shouldn't compile, Base is private
           ^~~~
66475.cc:10:22: note: declared private here
   using Base = Foo<T>; // the combination of this and the public export of a
type from Base below, causes this example to compile even though it shouldn't
                      ^

Reply via email to