#include <tuple>
#include <type_traits>
#include <vector>
 
template<typename T>
struct innermost_impl
{
    using type = T;
};
 
template<template<typename> class E, typename T>
struct innermost_impl<E<T>>
{
    using type = typename innermost_impl<T>::type;
};
 
template<template<typename...> class E, typename... Ts>
struct innermost_impl<E<Ts...>>
{
    using type = std::tuple<typename innermost_impl<Ts>::type...>;
};
 
template<typename T>
using innermost = typename innermost_impl<T>::type;
 
static_assert(std::is_same<innermost<std::vector<std::vector<std::vector<int>>>>, int>::value, "");
 
int main()
{
}
				I2luY2x1ZGUgPHR1cGxlPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgaW5uZXJtb3N0X2ltcGwKewogICAgdXNpbmcgdHlwZSA9IFQ7Cn07Cgp0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRSwgdHlwZW5hbWUgVD4Kc3RydWN0IGlubmVybW9zdF9pbXBsPEU8VD4+CnsKICAgIHVzaW5nIHR5cGUgPSB0eXBlbmFtZSBpbm5lcm1vc3RfaW1wbDxUPjo6dHlwZTsKfTsKCnRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBFLCB0eXBlbmFtZS4uLiBUcz4Kc3RydWN0IGlubmVybW9zdF9pbXBsPEU8VHMuLi4+Pgp7CiAgICB1c2luZyB0eXBlID0gc3RkOjp0dXBsZTx0eXBlbmFtZSBpbm5lcm1vc3RfaW1wbDxUcz46OnR5cGUuLi4+Owp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KdXNpbmcgaW5uZXJtb3N0ID0gdHlwZW5hbWUgaW5uZXJtb3N0X2ltcGw8VD46OnR5cGU7CgpzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxpbm5lcm1vc3Q8c3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8aW50Pj4+PiwgaW50Pjo6dmFsdWUsICIiKTsKCmludCBtYWluKCkKewp9
				
				
				
				
				
			 
			
				
			
			
				
	
		
	
	
	prog.cpp:26:1: error: static assertion failed: 
 static_assert(std::is_same<innermost<std::vector<std::vector<std::vector<int>>>>, int>::value, "");
 ^