#include<iostream>
#include <vector>
template<typename Type, Type v>
struct integral_constant
{
static constexpr Type value =v;
};
template<typename>
struct rank
: public integral_constant<std::size_t, 0> { };
template<template<typename>class Container,typename Type>
struct rank< Container<Type> >
: public integral_constant<std::size_t, 1 + rank<Type>::value> { };
template<class T>
constexpr size_t dimenstions(T)
{
return rank<T>::value ;
}
int main()
{
std::vector<std::vector<std::vector<int>>> vec;
std::cout<<dimenstions(vec) << '\n';
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCBUeXBlIHY+CiAgc3RydWN0IGludGVncmFsX2NvbnN0YW50CiAgewogICAgc3RhdGljIGNvbnN0ZXhwciBUeXBlIHZhbHVlID12OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lPgogICAgc3RydWN0IHJhbmsKICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAwPiB7IH07CgogIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lPmNsYXNzIENvbnRhaW5lcix0eXBlbmFtZSBUeXBlPgogICAgc3RydWN0IHJhbms8IENvbnRhaW5lcjxUeXBlPiA+CiAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMSArIHJhbms8VHlwZT46OnZhbHVlPiB7IH07CgogICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgY29uc3RleHByIHNpemVfdCBkaW1lbnN0aW9ucyhUKQogICAgewogICAgICAgICByZXR1cm4gcmFuazxUPjo6dmFsdWUgOwogICAgfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+Pj4gdmVjOwogICAgICBzdGQ6OmNvdXQ8PGRpbWVuc3Rpb25zKHZlYykgPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==