constant.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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/assert.hpp>
  5. #include <support/cnumeric.hpp>
  6. namespace hana = boost::hana;
  7. template <bool value>
  8. auto constant_bool() { return make_cnumeric<bool, value>(); }
  9. template <bool value>
  10. constexpr auto constexpr_constant_bool() { return make_cnumeric<bool, value>(); }
  11. // Make sure it works at global scope
  12. BOOST_HANA_CONSTANT_ASSERT(constant_bool<true>());
  13. BOOST_HANA_CONSTANT_ASSERT_MSG(constant_bool<true>(), "message");
  14. // Make sure it works at namespace scope
  15. namespace ns {
  16. BOOST_HANA_CONSTANT_ASSERT(constant_bool<true>());
  17. BOOST_HANA_CONSTANT_ASSERT_MSG(constant_bool<true>(), "message");
  18. }
  19. // Make sure it works in a constexpr context
  20. constexpr bool constexpr_context() {
  21. BOOST_HANA_CONSTANT_ASSERT(constexpr_constant_bool<true>());
  22. BOOST_HANA_CONSTANT_ASSERT_MSG(constexpr_constant_bool<true>(), "message");
  23. return true;
  24. }
  25. static_assert(constexpr_context(), "");
  26. int main() {
  27. // Make sure it works at function scope
  28. BOOST_HANA_CONSTANT_ASSERT(constant_bool<true>());
  29. BOOST_HANA_CONSTANT_ASSERT_MSG(constant_bool<true>(), "message");
  30. // Make sure it works inside a lambda
  31. auto lambda = []{
  32. BOOST_HANA_CONSTANT_ASSERT(constant_bool<true>());
  33. BOOST_HANA_CONSTANT_ASSERT_MSG(constant_bool<true>(), "message");
  34. };
  35. lambda();
  36. // Make sure we can reference a local variable
  37. auto yes = constant_bool<true>();
  38. BOOST_HANA_CONSTANT_ASSERT(yes);
  39. BOOST_HANA_CONSTANT_ASSERT_MSG(yes, "message");
  40. }