#include <iostream>
#include <utility>
template <class T1, class T2>
class myPair {
std::pair<T1, T2> member;
public:
myPair() = default;
myPair(T1 x, T2 y) : member(std::make_pair(x, y)) {}
template <std::size_t N>
const auto& operator[](std::integral_constant<std::size_t, N>) const {
static_assert(N < 2, "Index out of range");
return std::get<N>(member);
}
template <std::size_t N>
auto& operator[](std::integral_constant<std::size_t, N>) {
static_assert(N < 2, "Index out of range");
return std::get<N>(member);
}
};
template <std::size_t N>
using uint_ = std::integral_constant<std::size_t, N>;
int main() {
myPair<std::string, int> p("Hello", 42);
std::cout << p[uint_<0>{}] << " " << p[uint_<1>{}] << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+CmNsYXNzIG15UGFpciB7CiAgICBzdGQ6OnBhaXI8VDEsIFQyPiBtZW1iZXI7CnB1YmxpYzoKICAgIG15UGFpcigpID0gZGVmYXVsdDsKICAgIG15UGFpcihUMSB4LCBUMiB5KSA6IG1lbWJlcihzdGQ6Om1ha2VfcGFpcih4LCB5KSkge30KICAgIAoJdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+Cgljb25zdCBhdXRvJiBvcGVyYXRvcltdKHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIE4+KSBjb25zdCB7CgkgICAgc3RhdGljX2Fzc2VydChOIDwgMiwgIkluZGV4IG91dCBvZiByYW5nZSIpOwoJCgkgICAgcmV0dXJuIHN0ZDo6Z2V0PE4+KG1lbWJlcik7Cgl9CgkKCXRlbXBsYXRlIDxzdGQ6OnNpemVfdCBOPgoJYXV0byYgb3BlcmF0b3JbXShzdGQ6OmludGVncmFsX2NvbnN0YW50PHN0ZDo6c2l6ZV90LCBOPikgewoJICAgIHN0YXRpY19hc3NlcnQoTiA8IDIsICJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKCQoJICAgIHJldHVybiBzdGQ6OmdldDxOPihtZW1iZXIpOwoJfQp9OwoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IE4+CnVzaW5nIHVpbnRfID0gc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgTj47CgppbnQgbWFpbigpIHsKCW15UGFpcjxzdGQ6OnN0cmluZywgaW50PiBwKCJIZWxsbyIsIDQyKTsKCQoJc3RkOjpjb3V0IDw8IHBbdWludF88MD57fV0gPDwgIiAiIDw8IHBbdWludF88MT57fV0gPDwgc3RkOjplbmRsOwp9