#include <iostream>
using namespace std;
template <typename T, std::size_t... Sizes>
class Foo {
public:
static constexpr std::size_t rank1 = sizeof...(Sizes);
static const std::size_t rank2 = sizeof...(Sizes);
static const constexpr std::size_t rank3 = sizeof...(Sizes);
const std::size_t dimensions[sizeof...(Sizes)] = {Sizes...};
};
int main() {
Foo<int, 1, 2, 3> foo;
std::cout << "Rank: " << foo.rank1 << std::endl;
std::cout << "Rank: " << foo.rank2 << std::endl;
std::cout << "Rank: " << foo.rank3 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90Li4uIFNpemVzPgpjbGFzcyBGb28gewpwdWJsaWM6CglzdGF0aWMgY29uc3RleHByIHN0ZDo6c2l6ZV90IHJhbmsxID0gc2l6ZW9mLi4uKFNpemVzKTsKCXN0YXRpYyBjb25zdCBzdGQ6OnNpemVfdCByYW5rMiA9IHNpemVvZi4uLihTaXplcyk7CglzdGF0aWMgY29uc3QgY29uc3RleHByIHN0ZDo6c2l6ZV90IHJhbmszID0gc2l6ZW9mLi4uKFNpemVzKTsKCWNvbnN0IHN0ZDo6c2l6ZV90IGRpbWVuc2lvbnNbc2l6ZW9mLi4uKFNpemVzKV0gPSB7U2l6ZXMuLi59Owp9OwoKaW50IG1haW4oKSB7CgkKCUZvbzxpbnQsIDEsIDIsIDM+IGZvbzsKCQoJc3RkOjpjb3V0IDw8ICJSYW5rOiAiIDw8IGZvby5yYW5rMSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIlJhbms6ICIgPDwgZm9vLnJhbmsyIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiUmFuazogIiA8PCBmb28ucmFuazMgPDwgc3RkOjplbmRsOwoJCglyZXR1cm4gMDsKfQ==