#include<iostream>
#include <vector>
template<typename Type, Type val>
struct integral_constant
{
static constexpr Type value =val;
};
template<typename>
struct rank
: public integral_constant<std::size_t, 0> { };
template<typename Type>
struct rank< std::vector<Type> >
: public integral_constant<std::size_t, 1 + rank<Type>::value> { };
template<class T>
constexpr size_t vector_dimenstions(T)
{
return rank<T>::value ;
}
int main()
{
std::vector<std::vector<std::vector<int>>> vec;
std::cout<<vector_dimenstions(vec) << '\n';
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlLCBUeXBlIHZhbD4KICBzdHJ1Y3QgaW50ZWdyYWxfY29uc3RhbnQKICB7CiAgICBzdGF0aWMgY29uc3RleHByIFR5cGUgdmFsdWUgPXZhbDsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZT4KICAgIHN0cnVjdCByYW5rCiAgICA6IHB1YmxpYyBpbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgMD4geyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgogICAgc3RydWN0IHJhbms8IHN0ZDo6dmVjdG9yPFR5cGU+ID4KICAgIDogcHVibGljIGludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCAxICsgcmFuazxUeXBlPjo6dmFsdWU+IHsgfTsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBUPgogICBjb25zdGV4cHIgc2l6ZV90IHZlY3Rvcl9kaW1lbnN0aW9ucyhUKQogICAgewogICAgICAgICByZXR1cm4gcmFuazxUPjo6dmFsdWUgOwogICAgfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxpbnQ+Pj4gdmVjOwogICAgICBzdGQ6OmNvdXQ8PHZlY3Rvcl9kaW1lbnN0aW9ucyh2ZWMpIDw8ICdcbic7CiAgICByZXR1cm4gMDsKfQo=