// Copyright Louis Dionne 2013-2016 // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include namespace hana = boost::hana; int main() { // We use a sorted container because the order in which the functions // are called is unspecified. std::set before, after; auto xs = hana::make_tuple(1, 2, 3) | hana::tap([&](int x) { before.insert(x); }) | [](auto x) { return hana::make_tuple(x, -x); } | hana::tap([&](int x) { after.insert(x); }); BOOST_HANA_RUNTIME_CHECK(before == std::set{1, 2, 3}); BOOST_HANA_RUNTIME_CHECK(after == std::set{1, -1, 2, -2, 3, -3}); BOOST_HANA_RUNTIME_CHECK(xs == hana::make_tuple(1, -1, 2, -2, 3, -3)); }