/* @copyright Louis Dionne 2015 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 #include #include #include #include #include #include #include using namespace boost::hana; int main() { { //! [all_of] using namespace literals; BOOST_HANA_CONSTEXPR_LAMBDA auto odd = [](auto x) { return x % 2_c != 0_c; }; BOOST_HANA_CONSTEXPR_CHECK(all_of(make(1, 3), odd)); BOOST_HANA_CONSTANT_CHECK(!all_of(make(3_c, 4_c), odd)); BOOST_HANA_CONSTANT_CHECK( !all_of(make(type, type), trait) ); BOOST_HANA_CONSTANT_CHECK( all_of(make(type, type), trait) ); //! [all_of] }{ //! [all] BOOST_HANA_CONSTEXPR_CHECK(all(make(true_, true, true_))); BOOST_HANA_CONSTANT_CHECK(!all(make(true, false_, true_))); //! [all] }{ //! [any_of] using namespace literals; BOOST_HANA_CONSTEXPR_LAMBDA auto odd = [](auto x) { return x % 2_c != 0_c; }; BOOST_HANA_CONSTEXPR_CHECK(any_of(make(1, 2), odd)); BOOST_HANA_CONSTANT_CHECK(!any_of(make(2_c, 4_c), odd)); BOOST_HANA_CONSTANT_CHECK( any_of(make(type, type), trait) ); BOOST_HANA_CONSTANT_CHECK( !any_of(make(type, type), trait) ); //! [any_of] }{ //! [any] BOOST_HANA_CONSTANT_CHECK(any(make(false, false_, true_))); BOOST_HANA_CONSTEXPR_CHECK(any(make(false, false_, true))); BOOST_HANA_CONSTEXPR_CHECK(!any(make(false, false_, false_))); //! [any] }{ //! [elem] BOOST_HANA_CONSTANT_CHECK(elem(make(2, int_<2>, int_<3>, 'x'), int_<3>)); BOOST_HANA_CONSTANT_CHECK(elem(set(1, '2', type, "foobar"), type)); //! [elem] }{ //! [find_if] BOOST_HANA_CONSTEXPR_CHECK( find_if(make(1.0, 2, '3'), trait_) == just(2) ); BOOST_HANA_CONSTANT_CHECK( find_if(make(1.0, 2, '3'), trait_) == nothing ); constexpr auto types = tuple_t; BOOST_HANA_CONSTANT_CHECK( find_if(types, _ == type) == just(type) ); BOOST_HANA_CONSTANT_CHECK( find_if(types, _ == type) == nothing ); //! [find_if] }{ //! [find] BOOST_HANA_CONSTANT_CHECK( find(make(int_<1>, type, '3'), type) == just(type) ); BOOST_HANA_CONSTANT_CHECK( find(make(int_<1>, type, '3'), type) == nothing ); BOOST_HANA_CONSTEXPR_LAMBDA auto m = make( make(1, 'x'), make(type, 3.3), make(type, type) ); BOOST_HANA_CONSTEXPR_CHECK(find(m, type) == just(3.3)); //! [find] }{ //! [in] BOOST_HANA_CONSTEXPR_LAMBDA auto xs = make( int_<1>, type, int_<2>, type, int_<3>, type, type ); BOOST_HANA_CONSTANT_CHECK( filter(xs, in ^ make(int_<3>, type, type)) == make(type, int_<3>, type) ); //! [in] }{ //! [none_of] using namespace literals; BOOST_HANA_CONSTEXPR_LAMBDA auto odd = [](auto x) { return x % 2_c != 0_c; }; BOOST_HANA_CONSTANT_CHECK(none_of(make(2_c, 4_c), odd)); BOOST_HANA_CONSTEXPR_CHECK(!none_of(make(1, 2), odd)); BOOST_HANA_CONSTANT_CHECK( !none_of(make(type, type), trait) ); BOOST_HANA_CONSTANT_CHECK( none_of(make(type, type), trait) ); //! [none_of] }{ //! [none] BOOST_HANA_CONSTEXPR_CHECK(none(make(false, false_, false_))); BOOST_HANA_CONSTEXPR_CHECK(!none(make(false, false_, true))); BOOST_HANA_CONSTANT_CHECK(!none(make(false, false_, true_))); //! [none] }{ //! [subset] BOOST_HANA_CONSTEXPR_CHECK(subset(make(1, '2', 3.3), make(3.3, 1, '2', nullptr))); //! [subset] } }