#include #include "test.hpp" #include #include struct is_5 { template constexpr bool operator()(T i) const { return i == 5; } }; struct is_not_5 { template constexpr bool operator()(T i) const { return i != 5; } }; template struct test_int { template constexpr bool operator()(T x) const { return boost::fit::conditional( boost::fit::if_(std::is_integral())(F()), boost::fit::always(true) )(x); } }; BOOST_FIT_TEST_CASE() { BOOST_FIT_TEST_CHECK(test_int()(5)); BOOST_FIT_TEST_CHECK(test_int()(5L)); BOOST_FIT_TEST_CHECK(test_int()(5.0)); BOOST_FIT_TEST_CHECK(test_int()(6.0)); BOOST_FIT_TEST_CHECK(test_int()(6)); BOOST_FIT_TEST_CHECK(test_int()(6L)); BOOST_FIT_TEST_CHECK(test_int()(5.0)); BOOST_FIT_TEST_CHECK(test_int()(6.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(5)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(5L)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(5.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(6.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(6)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(6L)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(5.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int()(6.0)); } template struct test_int_c { template constexpr bool operator()(T x) const { return boost::fit::conditional( boost::fit::if_c::value>(F()), boost::fit::always(true) )(x); } }; BOOST_FIT_TEST_CASE() { BOOST_FIT_TEST_CHECK(test_int_c()(5)); BOOST_FIT_TEST_CHECK(test_int_c()(5L)); BOOST_FIT_TEST_CHECK(test_int_c()(5.0)); BOOST_FIT_TEST_CHECK(test_int_c()(6.0)); BOOST_FIT_TEST_CHECK(test_int_c()(6)); BOOST_FIT_TEST_CHECK(test_int_c()(6L)); BOOST_FIT_TEST_CHECK(test_int_c()(5.0)); BOOST_FIT_TEST_CHECK(test_int_c()(6.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(5)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(5L)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(5.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(6.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(6)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(6L)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(5.0)); BOOST_FIT_STATIC_TEST_CHECK(test_int_c()(6.0)); } struct sum_f { template constexpr int operator()(T x, T y) const { return boost::fit::conditional( boost::fit::if_(std::is_integral())(boost::fit::_ + boost::fit::_), boost::fit::always(0) )(x, y); } }; BOOST_FIT_TEST_CASE() { BOOST_FIT_TEST_CHECK(sum_f()(1, 2) == 3); BOOST_FIT_TEST_CHECK(sum_f()(1.0, 2.0) == 0); BOOST_FIT_TEST_CHECK(sum_f()("", "") == 0); BOOST_FIT_STATIC_TEST_CHECK(sum_f()(1, 2) == 3); BOOST_FIT_STATIC_TEST_CHECK(sum_f()("", "") == 0); } struct sum_f_c { template constexpr int operator()(T x, T y) const { return boost::fit::conditional( boost::fit::if_c::value>(boost::fit::_ + boost::fit::_), boost::fit::always(0) )(x, y); } }; BOOST_FIT_TEST_CASE() { BOOST_FIT_TEST_CHECK(sum_f_c()(1, 2) == 3); BOOST_FIT_TEST_CHECK(sum_f_c()(1.0, 2.0) == 0); BOOST_FIT_TEST_CHECK(sum_f_c()("", "") == 0); BOOST_FIT_STATIC_TEST_CHECK(sum_f_c()(1, 2) == 3); BOOST_FIT_STATIC_TEST_CHECK(sum_f_c()("", "") == 0); } #if BOOST_FIT_HAS_NOEXCEPT_DEDUCTION BOOST_FIT_TEST_CASE() { static_assert(noexcept(boost::fit::if_(std::is_integral())(boost::fit::identity)(1)), "noexcept if"); } #endif