fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct shr {
  5. template <typename A, typename B>
  6. constexpr auto operator()(A&& a, B&& b) {
  7. return std::forward<A>(a) >> std::forward<B>(b);
  8. }
  9. };
  10.  
  11. struct shl {
  12. template <typename A, typename B>
  13. constexpr void operator()(A&& a, B&& b) {
  14. std::forward<A>(a) << std::forward<B>(b);
  15. }
  16. };
  17.  
  18. template <typename F, typename A, typename B = A>
  19. auto Apply(A&& a, B&& b) {
  20. return F{}(std::forward<A>(a), std::forward<B>(b));
  21. }
  22.  
  23.  
  24. int main() {
  25. // std::cout << (2 >> 1); but uglier
  26. Apply<shl>(std::cout, Apply<shr>(2, 1));
  27. }
Success #stdin #stdout 0s 3140KB
stdin
Standard input is empty
stdout
1