#include #include "test.h" #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 fit::conditional( fit::if_(std::is_integral())(F()), fit::always(true) )(x); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(test_int()(5)); FIT_TEST_CHECK(test_int()(5L)); FIT_TEST_CHECK(test_int()(5.0)); FIT_TEST_CHECK(test_int()(6.0)); FIT_TEST_CHECK(test_int()(6)); FIT_TEST_CHECK(test_int()(6L)); FIT_TEST_CHECK(test_int()(5.0)); FIT_TEST_CHECK(test_int()(6.0)); FIT_STATIC_TEST_CHECK(test_int()(5)); FIT_STATIC_TEST_CHECK(test_int()(5L)); FIT_STATIC_TEST_CHECK(test_int()(5.0)); FIT_STATIC_TEST_CHECK(test_int()(6.0)); FIT_STATIC_TEST_CHECK(test_int()(6)); FIT_STATIC_TEST_CHECK(test_int()(6L)); FIT_STATIC_TEST_CHECK(test_int()(5.0)); FIT_STATIC_TEST_CHECK(test_int()(6.0)); } struct sum_f { template constexpr int operator()(T x, T y) const { return fit::conditional( fit::if_(std::is_integral())(fit::_ + fit::_), fit::always(0) )(x, y); } }; FIT_TEST_CASE() { FIT_TEST_CHECK(sum_f()(1, 2) == 3); FIT_TEST_CHECK(sum_f()(1.0, 2.0) == 0); FIT_TEST_CHECK(sum_f()("", "") == 0); FIT_STATIC_TEST_CHECK(sum_f()(1, 2) == 3); FIT_STATIC_TEST_CHECK(sum_f()("", "") == 0); }