/Src/Dependencies/Boost/libs/phoenix/test/operator/member.cpp

http://hadesmem.googlecode.com/ · C++ · 97 lines · 50 code · 26 blank · 21 comment · 12 complexity · 89fc009ad49dc781856155388d407794 MD5 · raw file

  1. /*=============================================================================
  2. Copyright (c) 2005-2007 Dan Marsden
  3. Copyright (c) 2005-2007 Joel de Guzman
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. ==============================================================================*/
  7. #include <boost/phoenix/core.hpp>
  8. #include <boost/phoenix/operator.hpp>
  9. #include <boost/detail/lightweight_test.hpp>
  10. #include <memory>
  11. #include <boost/shared_ptr.hpp>
  12. #include <boost/scoped_ptr.hpp>
  13. namespace
  14. {
  15. struct Test
  16. {
  17. int value;
  18. int func(int n) const { return n; }
  19. int dunc() { return 10; }
  20. int kunc() const { return 555; }
  21. };
  22. }
  23. namespace phoenix = boost::phoenix;
  24. int main()
  25. {
  26. using boost::scoped_ptr;
  27. using boost::shared_ptr;
  28. using phoenix::val;
  29. using phoenix::ref;
  30. using phoenix::arg_names::arg1;
  31. using phoenix::arg_names::arg2;
  32. Test test = {1};
  33. const Test* cptr = &test;
  34. Test* ptr = &test;
  35. BOOST_TEST((val(ptr)->*&Test::value)() == 1);
  36. /*
  37. BOOST_TEST((val(cptr)->*&Test::value)() == 1);
  38. BOOST_TEST((arg1->*&Test::value)(cptr) == 1);
  39. */
  40. /*
  41. ((val(ptr)->*&Test::value) = 2)();
  42. BOOST_TEST(test.value == 2);
  43. */
  44. BOOST_TEST((val(ptr)->*&Test::func)(3)() == 3);
  45. int i = 33;
  46. BOOST_TEST((arg1->*&Test::func)(arg2)(cptr, i) == i);
  47. BOOST_TEST((val(cptr)->*&Test::func)(4)() == 4);
  48. BOOST_TEST((val(ptr)->*&Test::dunc)()() == 10);
  49. BOOST_TEST((arg1->*&Test::func)(5)(ptr) == 5);
  50. BOOST_TEST((arg1->*&Test::kunc)()(ptr));
  51. shared_ptr<Test> sptr(new Test(test));
  52. //BOOST_TEST((arg1->*&Test::value)(sptr) == 2);
  53. BOOST_TEST((arg1->*&Test::func)(6)(sptr) == 6);
  54. scoped_ptr<Test> scptr(new Test(test));
  55. //BOOST_TEST((arg1->*&Test::value)(scptr) == 2);
  56. BOOST_TEST((arg1->*&Test::func)(7)(scptr) == 7);
  57. shared_ptr<const Test> csptr(new Test(test));
  58. //BOOST_TEST((arg1->*&Test::value)(csptr) == 2);
  59. BOOST_TEST((arg1->*&Test::func)(8)(csptr) == 8);
  60. scoped_ptr<const Test> cscptr(new Test(test));
  61. //BOOST_TEST((arg1->*&Test::value)(cscptr) == 2);
  62. BOOST_TEST((arg1->*&Test::func)(9)(cscptr) == 9);
  63. std::auto_ptr<Test> aptr(new Test(test));
  64. //BOOST_TEST((arg1->*&Test::value)(aptr) == 2);
  65. BOOST_TEST((arg1->*&Test::func)(10)(aptr) == 10);
  66. std::auto_ptr<const Test> captr(new Test(test));
  67. //BOOST_TEST((arg1->*&Test::value)(captr) == 2);
  68. BOOST_TEST((arg1->*&Test::func)(11)(captr) == 11);
  69. return boost::report_errors();
  70. }