#include #include #include class err {}; class err2 {}; struct expect { int s; }; struct moreexpected { int a; }; tl::expected< expect, err > foo(int a) { if(a > 10) { return tl::unexpected{err{}}; } return expect{4 * a}; } TEST(expected, tests) { auto value = foo(11) .and_then([](const expect & expect) { return tl::expected< moreexpected, err >{moreexpected{expect.s * 2}}; }) .or_else([](const err & error) { return tl::expected< moreexpected, err >{moreexpected{5}}; }) .and_then([](const moreexpected &expected){return tl::expected{6*expected.a};} ) ; EXPECT_EQ(*value, 5 * 6); }