template <typename T> struct Base {};
template <typename T> struct Derived : Base<T>{
typedef Base<T> Base;
};
int main() {
Derived<int> d;
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBCYXNlIHt9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZXJpdmVkIDogQmFzZTxUPnsKICAgIHR5cGVkZWYgQmFzZTxUPiBCYXNlOwp9OwoKaW50IG1haW4oKSB7CiAgICBEZXJpdmVkPGludD4gZDsKfQo=
prog.cpp:4:21: error: declaration of ‘typedef struct Base<T> Derived<T>::Base’ [-fpermissive]
typedef Base<T> Base;
^
prog.cpp:1:30: error: changes meaning of ‘Base’ from ‘struct Base<T>’ [-fpermissive]
template <typename T> struct Base {};
^
prog.cpp: In function ‘int main()’:
prog.cpp:8:18: warning: unused variable ‘d’ [-Wunused-variable]
Derived<int> d;
^