------- Comment #5 from dodji at gcc dot gnu dot org  2009-05-16 16:39 -------
By the way, here what I think is happening.

During the parsing of 

template<>
 struct y<void> : public x<void>
 {
   typedef x<void>::type z;
 };

We detect that x<void>::type is a use of a typedef that is a member of the
class template x. We then wrongly append x<void>::type to the representation of
template<typename T> struct y so that we can perform access checks on the use
of x<void>::type once we instantiate y<void>. Later, during the instantiation
of template<typename T> struct y into y<int> we wrongly try to perform access
checks of x<void>::type even if x<void>::type has no business with the
instantiation of template<typename T> struct y;

In short, the typedef use x<void>::type should be added (for access checking
purposes) to the representation of the specialized template<> struct y<void>,
not to the representation of the most general template<typename T> struct y.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40007

Reply via email to