fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. 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)){}; };
  5. static struct at_t {} at;
  6. template<typename LHS>
  7. at_lhs_t<LHS> operator%( LHS&& lhs, at_t ) { return {std::forward<LHS>(lhs)}; }
  8. template<typename LHS, typename RHS>
  9. auto operator%( at_lhs_t<LHS>&& lhs, RHS&& rhs )
  10. ->decltype( (std::forward<LHS>(lhs.lhs))->operator[](std::forward<RHS>(rhs)) )
  11. { return ( (std::forward<LHS>(lhs.lhs))->operator[](std::forward<RHS>(rhs)) ); }
  12.  
  13. class MyClass
  14. {
  15. public:
  16. void operator[](int n)
  17. {
  18. std::cout<<"In []";
  19. }
  20. };
  21. int main()
  22. {
  23. MyClass *a=new MyClass;
  24. a %at% 2;
  25. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
In []