- #include <iostream> 
- #include <functional> 
-   
- template <class F> 
- struct pipeable { 
- private: 
-     F f; 
- public: 
-     pipeable(F&& f) : f(std::forward<F>(f)) {} 
-     template<class... Xs> 
-     auto operator()(Xs&&... xs) -> 
-         decltype(std::bind(f, std::placeholders::_1, std::forward<Xs>(xs)...)) 
-     { 
-         return std::bind(f, std::placeholders::_1, std::forward<Xs>(xs)...); 
-     } 
- }; 
-   
- template <class F> 
- pipeable<F> piped(F&& f) { 
-     return pipeable<F>{std::forward<F>(f)}; 
- } 
-   
- template<class T, class F> 
- auto operator>>(T&& x, const F& f) -> decltype(f(std::forward<T>(x))) { 
-     return f(std::forward<T>(x)); 
- } 
-   
- int main() { 
-     auto add = piped([](int x, int y){ return x + y; }); 
-     int a = 10 >> add(20) ; 
-     std::cout << a << std::endl; 
-     return 0; 
- } 
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnRlbXBsYXRlIDxjbGFzcyBGPgpzdHJ1Y3QgcGlwZWFibGUgewpwcml2YXRlOgogICAgRiBmOwpwdWJsaWM6CiAgICBwaXBlYWJsZShGJiYgZikgOiBmKHN0ZDo6Zm9yd2FyZDxGPihmKSkge30KICAgIHRlbXBsYXRlPGNsYXNzLi4uIFhzPgogICAgYXV0byBvcGVyYXRvcigpKFhzJiYuLi4geHMpIC0+CiAgICAgICAgZGVjbHR5cGUoc3RkOjpiaW5kKGYsIHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgc3RkOjpmb3J3YXJkPFhzPih4cykuLi4pKQogICAgewogICAgICAgIHJldHVybiBzdGQ6OmJpbmQoZiwgc3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCBzdGQ6OmZvcndhcmQ8WHM+KHhzKS4uLik7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgRj4KcGlwZWFibGU8Rj4gcGlwZWQoRiYmIGYpIHsKICAgIHJldHVybiBwaXBlYWJsZTxGPntzdGQ6OmZvcndhcmQ8Rj4oZil9Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBGPgphdXRvIG9wZXJhdG9yPj4oVCYmIHgsIGNvbnN0IEYmIGYpIC0+IGRlY2x0eXBlKGYoc3RkOjpmb3J3YXJkPFQ+KHgpKSkgewogICAgcmV0dXJuIGYoc3RkOjpmb3J3YXJkPFQ+KHgpKTsKfQoKaW50IG1haW4oKSB7CiAgICBhdXRvIGFkZCA9IHBpcGVkKFtdKGludCB4LCBpbnQgeSl7IHJldHVybiB4ICsgeTsgfSk7CiAgICBpbnQgYSA9IDEwID4+IGFkZCgyMCkgOwogICAgc3RkOjpjb3V0IDw8IGEgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0=