variant_holds_alternative.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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/core/lightweight_test.hpp>
  9. #include <string>
  10. using namespace boost::variant2;
  11. int main()
  12. {
  13. {
  14. variant<int> v;
  15. BOOST_TEST( holds_alternative<int>( v ) );
  16. }
  17. {
  18. variant<int, float> v;
  19. BOOST_TEST( holds_alternative<int>( v ) );
  20. BOOST_TEST( !holds_alternative<float>( v ) );
  21. }
  22. {
  23. variant<int, float> v( 3.14f );
  24. BOOST_TEST( !holds_alternative<int>( v ) );
  25. BOOST_TEST( holds_alternative<float>( v ) );
  26. }
  27. {
  28. variant<int, float, float> v;
  29. BOOST_TEST( holds_alternative<int>( v ) );
  30. }
  31. {
  32. variant<int, int, float> v( 3.14f );
  33. BOOST_TEST( holds_alternative<float>( v ) );
  34. }
  35. {
  36. variant<int, float, std::string> v;
  37. BOOST_TEST( holds_alternative<int>( v ) );
  38. BOOST_TEST( !holds_alternative<float>( v ) );
  39. BOOST_TEST( !holds_alternative<std::string>( v ) );
  40. }
  41. {
  42. variant<int, float, std::string> v( 3.14f );
  43. BOOST_TEST( !holds_alternative<int>( v ) );
  44. BOOST_TEST( holds_alternative<float>( v ) );
  45. BOOST_TEST( !holds_alternative<std::string>( v ) );
  46. }
  47. {
  48. variant<int, float, std::string> v( "text" );
  49. BOOST_TEST( !holds_alternative<int>( v ) );
  50. BOOST_TEST( !holds_alternative<float>( v ) );
  51. BOOST_TEST( holds_alternative<std::string>( v ) );
  52. }
  53. {
  54. variant<int, int, float, std::string> v( 3.14f );
  55. BOOST_TEST( holds_alternative<float>( v ) );
  56. BOOST_TEST( !holds_alternative<std::string>( v ) );
  57. }
  58. {
  59. variant<int, int, float, std::string> v( "text" );
  60. BOOST_TEST( !holds_alternative<float>( v ) );
  61. BOOST_TEST( holds_alternative<std::string>( v ) );
  62. }
  63. return boost::report_errors();
  64. }