is_empty.hpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. #ifndef BOOST_HANA_TEST_AUTO_IS_EMPTY_HPP
  5. #define BOOST_HANA_TEST_AUTO_IS_EMPTY_HPP
  6. #include <boost/hana/assert.hpp>
  7. #include <boost/hana/is_empty.hpp>
  8. #include <boost/hana/not.hpp>
  9. #include "test_case.hpp"
  10. namespace _test_is_empty_detail { template <int i> struct undefined { }; }
  11. TestCase test_is_empty{[]{
  12. namespace hana = boost::hana;
  13. using _test_is_empty_detail::undefined;
  14. BOOST_HANA_CONSTANT_CHECK(hana::is_empty(
  15. MAKE_TUPLE()
  16. ));
  17. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(
  18. MAKE_TUPLE(undefined<0>{})
  19. )));
  20. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(
  21. MAKE_TUPLE(undefined<0>{}, undefined<1>{})
  22. )));
  23. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(
  24. MAKE_TUPLE(undefined<0>{}, undefined<1>{}, undefined<2>{})
  25. )));
  26. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(
  27. MAKE_TUPLE(undefined<0>{}, undefined<1>{}, undefined<2>{}, undefined<3>{})
  28. )));
  29. // Check with a runtime value
  30. {
  31. int i = 3; // <- runtime value
  32. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(MAKE_TUPLE(i))));
  33. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(MAKE_TUPLE(i, i))));
  34. }
  35. #ifndef MAKE_TUPLE_NO_CONSTEXPR
  36. static_assert(hana::is_empty(MAKE_TUPLE()), "");
  37. static_assert(hana::not_(hana::is_empty(MAKE_TUPLE(undefined<0>{}))), "");
  38. static_assert(hana::not_(hana::is_empty(MAKE_TUPLE(undefined<0>{}, undefined<1>{}))), "");
  39. #endif
  40. }};
  41. #endif // !BOOST_HANA_TEST_AUTO_IS_EMPTY_HPP