#include <iostream>
#include <utility>
template<typename LHS> struct at_lhs_t { LHS lhs; at_lhs_t(at_lhs_t const&)=delete; at_lhs_t(LHS&& l):lhs(std::forward<LHS>(l)){}; };
static struct at_t {} at;
template<typename LHS>
at_lhs_t<LHS> operator%( LHS&& lhs, at_t ) { return {std::forward<LHS>(lhs)}; }
template<typename LHS, typename RHS>
auto operator%( at_lhs_t<LHS>&& lhs, RHS&& rhs )
->decltype( (std::forward<LHS>(lhs.lhs))->operator[](std::forward<RHS>(rhs)) )
{ return ( (std::forward<LHS>(lhs.lhs))->operator[](std::forward<RHS>(rhs)) ); }
class MyClass
{
public:
void operator[](int n)
{
std::cout<<"In []";
}
};
int main()
{
MyClass *a=new MyClass;
a %at% 2;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMSFM+IHN0cnVjdCBhdF9saHNfdCB7IExIUyBsaHM7IGF0X2xoc190KGF0X2xoc190IGNvbnN0Jik9ZGVsZXRlOyBhdF9saHNfdChMSFMmJiBsKTpsaHMoc3RkOjpmb3J3YXJkPExIUz4obCkpe307IH07CiAgICBzdGF0aWMgc3RydWN0IGF0X3Qge30gYXQ7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMSFM+CiAgICBhdF9saHNfdDxMSFM+IG9wZXJhdG9yJSggTEhTJiYgbGhzLCBhdF90ICkgeyByZXR1cm4ge3N0ZDo6Zm9yd2FyZDxMSFM+KGxocyl9OyB9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMSFMsIHR5cGVuYW1lIFJIUz4KICAgIGF1dG8gb3BlcmF0b3IlKCBhdF9saHNfdDxMSFM+JiYgbGhzLCBSSFMmJiByaHMgKQogICAgLT5kZWNsdHlwZSggKHN0ZDo6Zm9yd2FyZDxMSFM+KGxocy5saHMpKS0+b3BlcmF0b3JbXShzdGQ6OmZvcndhcmQ8UkhTPihyaHMpKSApCiAgICAgeyByZXR1cm4gKCAoc3RkOjpmb3J3YXJkPExIUz4obGhzLmxocykpLT5vcGVyYXRvcltdKHN0ZDo6Zm9yd2FyZDxSSFM+KHJocykpICk7IH0KCiAgICBjbGFzcyBNeUNsYXNzCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBvcGVyYXRvcltdKGludCBuKQogICAgICAgIHsKICAgICAgICAgICAgc3RkOjpjb3V0PDwiSW4gW10iOwogICAgICAgIH0KICAgIH07CiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgTXlDbGFzcyAqYT1uZXcgTXlDbGFzczsKICAgICAgICBhICVhdCUgMjsKICAgIH0=