any_of.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. // Copyright Louis Dionne 2013-2017
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
  4. #include <boost/hana/detail/any_of.hpp>
  5. #include <boost/hana/detail/wrong.hpp>
  6. #include <boost/hana/integral_constant.hpp>
  7. namespace hana = boost::hana;
  8. template <typename I>
  9. struct is_even {
  10. static constexpr bool value = I::value % 2 == 0;
  11. };
  12. static_assert(!hana::detail::any_of<is_even>::value, "");
  13. static_assert(!hana::detail::any_of<is_even, hana::int_<1>>::value, "");
  14. static_assert(!hana::detail::any_of<is_even, hana::int_<1>, hana::int_<3>>::value, "");
  15. static_assert(!hana::detail::any_of<is_even, hana::int_<1>, hana::int_<3>, hana::int_<5>>::value, "");
  16. static_assert(!hana::detail::any_of<is_even, hana::int_<1>, hana::int_<3>, hana::int_<5>, hana::int_<7>>::value, "");
  17. static_assert(hana::detail::any_of<is_even, hana::int_<0>>::value, "");
  18. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<2>>::value, "");
  19. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<2>, hana::int_<4>>::value, "");
  20. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<2>, hana::int_<4>, hana::int_<6>>::value, "");
  21. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<1>>::value, "");
  22. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<1>, hana::int_<2>>::value, "");
  23. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<1>, hana::int_<2>, hana::int_<3>>::value, "");
  24. static_assert(hana::detail::any_of<is_even, hana::int_<0>, hana::int_<1>, hana::int_<2>, hana::int_<3>, hana::int_<4>>::value, "");
  25. static_assert(hana::detail::any_of<is_even, hana::int_<1>, hana::int_<3>, hana::int_<5>, hana::int_<8>>::value, "");
  26. static_assert(hana::detail::any_of<is_even, hana::int_<1>, hana::int_<8>, hana::int_<5>, hana::int_<7>>::value, "");
  27. // Make sure we short-circuit properly
  28. template <typename ...Dummy>
  29. struct fail {
  30. static_assert(hana::detail::wrong<Dummy...>::value,
  31. "this must never be instantiated");
  32. };
  33. static_assert(hana::detail::any_of<is_even, hana::int_<1>, hana::int_<2>, fail<>>::value, "");
  34. static_assert(hana::detail::any_of<is_even, hana::int_<1>, hana::int_<2>, fail<>, hana::int_<3>>::value, "");
  35. static_assert(hana::detail::any_of<is_even, hana::int_<1>, hana::int_<2>, fail<>, hana::int_<4>>::value, "");
  36. int main() { }