#include <iostream>
template < typename T>
struct Base
{
using Type = int ;
} ;
template < typename T>
struct intermediate : Base< T>
{
// using Type = typename intermediate<T>::Type; // Not needed
} ;
template < typename T>
struct Derived : intermediate< T>
{
using Type = intermediate< T> :: Type ;
} ;
int main( )
{
Derived< void > :: Type b = 1 ;
std:: cout << b << std:: endl ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBCYXNlCnsKICAgIHVzaW5nIFR5cGUgPSBpbnQ7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGludGVybWVkaWF0ZSA6IEJhc2U8VD4KewoJLy8gdXNpbmcgVHlwZSA9IHR5cGVuYW1lIGludGVybWVkaWF0ZTxUPjo6VHlwZTsgLy8gTm90IG5lZWRlZAp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBEZXJpdmVkIDogaW50ZXJtZWRpYXRlPFQ+CnsKICAgIHVzaW5nIFR5cGUgPSAgaW50ZXJtZWRpYXRlPFQ+OjpUeXBlOwp9OwoKaW50IG1haW4oKQp7CiAgICBEZXJpdmVkPHZvaWQ+OjpUeXBlIGIgPSAxOwogICAgc3RkOjpjb3V0IDw8IGIgPDwgc3RkOjplbmRsOwp9