/* @copyright Louis Dionne 2014 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 using namespace boost::hana; int main() { { //! [and_] BOOST_HANA_CONSTANT_CHECK(and_(true_, true_, true_, true_)); BOOST_HANA_CONSTEXPR_CHECK(!and_(true_, false, true_, true_)); //! [and_] }{ //! [or_] BOOST_HANA_CONSTANT_CHECK(or_(false_, false_, true_)); BOOST_HANA_CONSTANT_CHECK(!or_(false_, false_, false_)); //! [or_] }{ //! [if_] BOOST_HANA_CONSTEXPR_CHECK(if_(true, 1, 2) == 1); BOOST_HANA_CONSTEXPR_CHECK(if_(false, 1, 2) == 2); BOOST_HANA_CONSTEXPR_CHECK( if_(true_, tuple('t', 'r', 'u', 'e'), tuple('f', 'a', 'l', 's', 'e') ) == tuple('t', 'r', 'u', 'e') ); //! [if_] }{ //! [not_] BOOST_HANA_CONSTANT_CHECK(not_(true_) == false_); BOOST_HANA_CONSTEXPR_CHECK(not_(false) == true); //! [not_] }{ //! [heterogeneous_eval_if] BOOST_HANA_CONSTEXPR_LAMBDA auto safe_make_unsigned = [](auto t) { return eval_if(trait(t), [=](auto id) { return id(template_)(t); }, always(t) ); }; BOOST_HANA_CONSTANT_CHECK(safe_make_unsigned(type) == type); BOOST_HANA_CONSTANT_CHECK(safe_make_unsigned(type) == type); //! [heterogeneous_eval_if] (void)safe_make_unsigned; //! [homogeneous_eval_if] BOOST_HANA_CONSTEXPR_LAMBDA auto safe_divide = [](auto x, auto y) { return eval_if(y == 0, [=](auto) { return 0; }, [=](auto id) { return id(x) / y; } ); }; BOOST_HANA_CONSTEXPR_CHECK(safe_divide(6, 3) == 2); BOOST_HANA_CONSTEXPR_CHECK(safe_divide(6, 0) == 0); //! [homogeneous_eval_if] } }