template<typename T> class n; template<typename T> class b { protected: typedef n<T> n_t; }; template<typename T> class d : private b<T> { using typename b<T>::n_t; public: n_t*test0(); typename n_t*test1(); typename b<T>::n_t*test2(); }; void test() { d<int> di; di.test0(); di.test1(); di.test2(); } results in errors on the unqualified uses of n_t in class d. I cannot see anything invalid with these constructs, nor can Intel's or a couple of other compilers I tried this with.
Confirmed, before 3.4.0, the using statement was rejected also.
Is this a dup of Bug 14258 ?
Yes it is a dup. *** This bug has been marked as a duplicate of 14258 ***