#include #include /** TESTCASES **/ int fun1(std::string const& str) { return std::stoi(str); } char fun2(int x) { return static_cast(x); } struct NextCharacter { char operator()(char c) const { return c + 1; } }; int main() { assert((payload(1) | [](int x) -> double { return 1.5f + x; } | [](double y) -> int { return 2*y; }) == 5); assert((payload("67") | fun1 | fun2) == 'C'); char c { 'a' }; assert((payload(c) | NextCharacter{}) == 'b'); }