template <typename T>
struct base {
template <typename S>
struct nested {
};
};
template <typename T>
struct derived: base<T> {
void foo() {
typename base<T>::template nested<T> obj;
}
};
int main() {
derived<int>().foo();
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBiYXNlIHsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTPgogICAgc3RydWN0IG5lc3RlZCB7CiAgICB9Owp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBkZXJpdmVkOiBiYXNlPFQ+IHsKICAgIHZvaWQgZm9vKCkgewogICAgICAgIHR5cGVuYW1lIGJhc2U8VD46OnRlbXBsYXRlIG5lc3RlZDxUPiBvYmo7CiAgICB9Cn07CgppbnQgbWFpbigpIHsKICAgIGRlcml2ZWQ8aW50PigpLmZvbygpOwp9