#include <iostream>
#include <vector>
using namespace std;
struct mylist {
vector<int> oops { 3,5, 7, 9};
int& operator[] (size_t i) {
cout << "indexing overload"<<endl;
return oops[i];
}
mylist operator[] (pair<int, int>p) {
cout << "slicing overload from "<<p.first<<" to "<<p.second<<endl;
return mylist(); // just for proof of concept
}
};
int main() {
mylist l;
cout<< l[2] <<endl;
l[make_pair(3,5)];
l[{4,8}];
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG15bGlzdCB7Cgl2ZWN0b3I8aW50PiBvb3BzIHsgMyw1LCA3LCA5fTsgCiAgICBpbnQmIG9wZXJhdG9yW10gKHNpemVfdCBpKSB7IAogICAgCWNvdXQgPDwgImluZGV4aW5nIG92ZXJsb2FkIjw8ZW5kbDsgCiAgICAJcmV0dXJuIG9vcHNbaV07IAogICAgfQogICAgbXlsaXN0IG9wZXJhdG9yW10gKHBhaXI8aW50LCBpbnQ+cCkgeyAKICAgICAJY291dCA8PCAic2xpY2luZyBvdmVybG9hZCBmcm9tICI8PHAuZmlyc3Q8PCIgdG8gIjw8cC5zZWNvbmQ8PGVuZGw7IAogICAJCXJldHVybiBteWxpc3QoKTsgICAgLy8ganVzdCBmb3IgcHJvb2Ygb2YgY29uY2VwdCAgCiAgICB9Cn07CgppbnQgbWFpbigpIHsKCW15bGlzdCBsOyAKCWNvdXQ8PCBsWzJdIDw8ZW5kbDsgIAoJbFttYWtlX3BhaXIoMyw1KV07CglsW3s0LDh9XTsKCXJldHVybiAwOwp9