#include <iostream>
using namespace std;
template<class... Ts> struct mpl_tuple {};
template<class T, int N, class TUPLE> struct tuple_maker;
template<class T, class... Ts> struct tuple_maker<T,0,mpl_tuple<Ts...>> {
using type = mpl_tuple<Ts...>;
};
template<class T, int N, class... Ts> struct tuple_maker<T,N,mpl_tuple<Ts...>>
: tuple_maker<T,N-1,mpl_tuple<T,Ts...>> {};
template<class T, int N> using make_tuple = typename tuple_maker<T,N,mpl_tuple<>>::type;
template<class TUPLE> struct VectorBase;
template<class... Ts> struct VectorBase<mpl_tuple<Ts...>> {
void set(Ts... ts) {
cout << __PRETTY_FUNCTION__ << endl;
}
};
template<class T, int N> struct Vector : VectorBase<make_tuple<T,N>> {};
int main() {
Vector<int,5> v5;
v5.set(1,2,3,4,5);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MuLi4gVHM+IHN0cnVjdCBtcGxfdHVwbGUge307Cgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgTiwgY2xhc3MgVFVQTEU+IHN0cnVjdCB0dXBsZV9tYWtlcjsKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MuLi4gVHM+IHN0cnVjdCB0dXBsZV9tYWtlcjxULDAsbXBsX3R1cGxlPFRzLi4uPj4gewoJdXNpbmcgdHlwZSA9IG1wbF90dXBsZTxUcy4uLj47Cn07CnRlbXBsYXRlPGNsYXNzIFQsIGludCBOLCBjbGFzcy4uLiBUcz4gc3RydWN0IHR1cGxlX21ha2VyPFQsTixtcGxfdHVwbGU8VHMuLi4+PgoJOiB0dXBsZV9tYWtlcjxULE4tMSxtcGxfdHVwbGU8VCxUcy4uLj4+IHt9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50IE4+IHVzaW5nIG1ha2VfdHVwbGUgPSB0eXBlbmFtZSB0dXBsZV9tYWtlcjxULE4sbXBsX3R1cGxlPD4+Ojp0eXBlOwoKdGVtcGxhdGU8Y2xhc3MgVFVQTEU+IHN0cnVjdCBWZWN0b3JCYXNlOwp0ZW1wbGF0ZTxjbGFzcy4uLiBUcz4gc3RydWN0IFZlY3RvckJhc2U8bXBsX3R1cGxlPFRzLi4uPj4gewoJdm9pZCBzZXQoVHMuLi4gdHMpIHsKCQljb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgZW5kbDsKCX0KfTsKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBOPiBzdHJ1Y3QgVmVjdG9yIDogVmVjdG9yQmFzZTxtYWtlX3R1cGxlPFQsTj4+IHt9OwoKaW50IG1haW4oKSB7CglWZWN0b3I8aW50LDU+IHY1OwoJdjUuc2V0KDEsMiwzLDQsNSk7Cn0=