I'd really like it if they added D's uniform function call syntax to C++ (http://www.drdobbs.com/cpp/uniform-function-call-syntax/2327...). Then this code could be:
auto r = numbers().where([](int x) { return x > 2; }).select([](int x) { return x * x; });
Without the need and potential ambiguity that arises from overloading the pipe operator, you'd just use simple free functions instead and it'd just work.