ticket_6742_transformed_c4789_warning.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Boost.Range library
  2. //
  3. // Copyright Neil Groves 2014. Use, modification and
  4. // distribution is subject to the Boost Software License, Version
  5. // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  6. // http://www.boost.org/LICENSE_1_0.txt)
  7. //
  8. //
  9. // For more information, see http://www.boost.org/libs/range/
  10. //
  11. #include <boost/phoenix/core.hpp>
  12. #include <boost/phoenix/operator.hpp>
  13. #include <boost/range/adaptor/transformed.hpp>
  14. #include <boost/range/algorithm_ext/push_back.hpp>
  15. #include <boost/test/test_tools.hpp>
  16. #include <boost/test/unit_test.hpp>
  17. #include <iterator>
  18. #include <iostream>
  19. #include <vector>
  20. namespace
  21. {
  22. struct test_struct
  23. {
  24. double x;
  25. double y;
  26. };
  27. struct get_x
  28. {
  29. typedef double result_type;
  30. double operator()(const test_struct& s) const
  31. {
  32. return s.x;
  33. }
  34. };
  35. void range_transformed_warning()
  36. {
  37. using namespace boost::phoenix::arg_names;
  38. using namespace boost::adaptors;
  39. test_struct t;
  40. t.x = 2.0;
  41. t.y = -4.0;
  42. std::vector<test_struct> v(10u, t);
  43. std::vector<double> output1;
  44. boost::push_back(output1, v | transformed((&arg1)->*& test_struct::x));
  45. std::vector<double> output2;
  46. boost::push_back(output2, v | transformed(get_x()));
  47. BOOST_CHECK_EQUAL_COLLECTIONS(
  48. output1.begin(), output1.end(),
  49. output2.begin(), output2.end());
  50. }
  51. } // anonymous namespace
  52. boost::unit_test::test_suite*
  53. init_unit_test_suite(int argc, char* argv[])
  54. {
  55. boost::unit_test::test_suite* test
  56. = BOOST_TEST_SUITE( "Range adaptors - transformed warning" );
  57. test->add(BOOST_TEST_CASE(&range_transformed_warning));
  58. return test;
  59. }