#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;
}