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

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Christian Prochaska from comment #7)
> Since the commit above the following test fails. Is this correct?

> 
> class T1 { };
> class T2 { };
> 
> template <typename T>
> class A { };
> 
> class B : A<T1> { };
> 
> class C : B
> {
>       class D : A<T2> { };
> };
> 
> test.cc:11:19: error: ‘class A<T1> A<T1>::A’ is private within this context
>    11 |         class D : A<T2> { };
>       |                   ^~~~~
> test.cc:7:7: note: declared private here
>     7 | class B : A<T1> { };
>       |       ^



Yes it should be rejected as A is a private name of A<T1> and A<T1> is private
to B. clang rejects it for the same reason though has a better error message:
<source>:12:19: error: 'A' is a private member of 'A<T1>'
        class D : A<T2> { };
                  ^
<source>:8:11: note: constrained by implicitly private inheritance here
class B : A<T1> { };
          ^~~~~
<source>:6:7: note: member is declared here
class A { };
      ^

Reply via email to