constexpr_test.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // Copyright 2018 Peter Dimov.
  2. // Distributed under the Boost Software License, Version 1.0.
  3. #include <boost/system/error_code.hpp>
  4. #include <boost/core/lightweight_test.hpp>
  5. #include <boost/config/pragma_message.hpp>
  6. #include <boost/static_assert.hpp>
  7. #include <boost/config.hpp>
  8. #include <boost/config/workaround.hpp>
  9. #if !defined(BOOST_SYSTEM_HAS_CONSTEXPR)
  10. BOOST_PRAGMA_MESSAGE("Skipping constexpr test, BOOST_SYSTEM_HAS_CONSTEXPR isn't defined")
  11. int main() {}
  12. #else
  13. using namespace boost::system;
  14. constexpr error_code e1( 1, system_category() );
  15. BOOST_STATIC_ASSERT( e1.value() == 1 );
  16. BOOST_STATIC_ASSERT( e1.category() == system_category() );
  17. BOOST_STATIC_ASSERT( e1 );
  18. BOOST_STATIC_ASSERT( e1 == e1 );
  19. constexpr error_code e2( 2, generic_category() );
  20. BOOST_STATIC_ASSERT( e2.value() == 2 );
  21. BOOST_STATIC_ASSERT( e2.category() == generic_category() );
  22. BOOST_STATIC_ASSERT( e2 );
  23. BOOST_STATIC_ASSERT( e2 == e2 );
  24. #if !BOOST_WORKAROUND(BOOST_GCC, < 80200)
  25. BOOST_STATIC_ASSERT( e1 != e2 );
  26. #endif
  27. constexpr error_code e3;
  28. BOOST_STATIC_ASSERT( e3.value() == 0 );
  29. BOOST_STATIC_ASSERT( e3.category() == system_category() );
  30. BOOST_STATIC_ASSERT( !e3 );
  31. BOOST_STATIC_ASSERT( e3 == e3 );
  32. #if !BOOST_WORKAROUND(BOOST_GCC, < 80200)
  33. BOOST_STATIC_ASSERT( e1 != e3 );
  34. #endif
  35. int main()
  36. {
  37. error_code e1_( 1, system_category() );
  38. BOOST_TEST_EQ( e1, e1_ );
  39. error_code e2_( 2, generic_category() );
  40. BOOST_TEST_EQ( e2, e2_ );
  41. error_code e3_;
  42. BOOST_TEST_EQ( e3, e3_ );
  43. return boost::report_errors();
  44. }
  45. #endif