variant_get_by_type_cx.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright 2017 Peter Dimov.
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. //
  5. // See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt
  7. #include <boost/variant2/variant.hpp>
  8. #include <boost/config.hpp>
  9. using namespace boost::variant2;
  10. #define STATIC_ASSERT(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
  11. #if BOOST_WORKAROUND(BOOST_GCC, < 50000)
  12. # define STATIC_ASSERT_IF(...)
  13. #else
  14. # define STATIC_ASSERT_IF(...) static_assert(__VA_ARGS__, #__VA_ARGS__)
  15. #endif
  16. int main()
  17. {
  18. {
  19. constexpr variant<int> v;
  20. STATIC_ASSERT( get<int>(v) == 0 );
  21. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  22. }
  23. {
  24. constexpr variant<int> v( 1 );
  25. STATIC_ASSERT( get<int>(v) == 1 );
  26. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  27. }
  28. {
  29. constexpr variant<int, float> v;
  30. STATIC_ASSERT( get<int>(v) == 0 );
  31. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  32. STATIC_ASSERT_IF( get_if<float>(&v) == nullptr );
  33. }
  34. {
  35. constexpr variant<int, float> v( 1 );
  36. STATIC_ASSERT( get<int>(v) == 1 );
  37. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  38. STATIC_ASSERT_IF( get_if<float>(&v) == nullptr );
  39. }
  40. {
  41. constexpr variant<int, float> v( 3.14f );
  42. STATIC_ASSERT( get<float>(v) == 3.14f );
  43. STATIC_ASSERT_IF( get_if<int>(&v) == nullptr );
  44. STATIC_ASSERT_IF( get_if<float>(&v) == &get<float>(v) );
  45. }
  46. {
  47. constexpr variant<int, float, float> v;
  48. STATIC_ASSERT( get<int>(v) == 0 );
  49. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  50. }
  51. {
  52. constexpr variant<int, float, float> v( 1 );
  53. STATIC_ASSERT( get<int>(v) == 1 );
  54. STATIC_ASSERT_IF( get_if<int>(&v) == &get<int>(v) );
  55. }
  56. {
  57. constexpr variant<int, int, float> v( 3.14f );
  58. STATIC_ASSERT( get<float>(v) == 3.14f );
  59. STATIC_ASSERT_IF( get_if<float>(&v) == &get<float>(v) );
  60. }
  61. }