1 /*============================================================================= 2 Copyright (c) 2005-2007 Dan Marsden 3 Copyright (c) 2005-2007 Joel de Guzman 4 Copyright (c) 2014 John Fletcher 5 6 Distributed under the Boost Software License, Version 1.0. (See accompanying 7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 8 ==============================================================================*/ 9 10 #include <boost/phoenix/core.hpp> 11 #include <boost/phoenix/operator.hpp> 12 #include <boost/detail/lightweight_test.hpp> 13 //#include <boost/move/unique_ptr.hpp> 14 15 #include <memory> 16 17 #include <boost/shared_ptr.hpp> 18 #include <boost/scoped_ptr.hpp> 19 20 namespace 21 { 22 struct Test 23 { 24 int value; 25 func__anonfaef17010111::Test26 int func(int n) const { return n; } dunc__anonfaef17010111::Test27 int dunc() { return 10; } kunc__anonfaef17010111::Test28 int kunc() const { return 555; } 29 }; 30 } 31 32 namespace phoenix = boost::phoenix; 33 main()34int main() 35 { 36 using boost::scoped_ptr; 37 using boost::shared_ptr; 38 using phoenix::val; 39 using phoenix::ref; 40 using phoenix::arg_names::arg1; 41 using phoenix::arg_names::arg2; 42 43 Test test = {1}; 44 const Test* cptr = &test; 45 Test* ptr = &test; 46 47 BOOST_TEST((val(ptr)->*&Test::value)() == 1); 48 BOOST_TEST((val(cptr)->*&Test::value)() == 1); 49 BOOST_TEST((arg1->*&Test::value)(cptr) == 1); 50 51 ((val(ptr)->*&Test::value) = 2)(); 52 BOOST_TEST(test.value == 2); 53 54 55 BOOST_TEST((val(ptr)->*&Test::func)(val(3))() == 3); 56 int i = 33; 57 BOOST_TEST((arg1->*&Test::func)(arg2)(cptr, i) == i); 58 //BOOST_TEST((val(cptr)->*&Test::func)(4)() == 4); 59 BOOST_TEST((val(ptr)->*&Test::dunc)()() == 10); 60 61 BOOST_TEST((arg1->*&Test::func)(5)(ptr) == 5); 62 BOOST_TEST((arg1->*&Test::kunc)()(ptr)); 63 64 shared_ptr<Test> sptr(new Test(test)); 65 66 BOOST_TEST((arg1->*&Test::value)(sptr) == 2); 67 BOOST_TEST((arg1->*&Test::func)(6)(sptr) == 6); 68 69 scoped_ptr<Test> scptr(new Test(test)); 70 71 BOOST_TEST((arg1->*&Test::value)(scptr) == 2); 72 BOOST_TEST((arg1->*&Test::func)(7)(scptr) == 7); 73 74 shared_ptr<const Test> csptr(new Test(test)); 75 76 BOOST_TEST((arg1->*&Test::value)(csptr) == 2); 77 BOOST_TEST((arg1->*&Test::func)(8)(csptr) == 8); 78 79 scoped_ptr<const Test> cscptr(new Test(test)); 80 81 BOOST_TEST((arg1->*&Test::value)(cscptr) == 2); 82 BOOST_TEST((arg1->*&Test::func)(9)(cscptr) == 9); 83 84 #ifdef BOOST_NO_CXX11_SMART_PTR 85 std::auto_ptr<Test> aptr(new Test(test)); 86 #else 87 std::unique_ptr<Test> aptr(new Test(test)); 88 #endif 89 90 BOOST_TEST((arg1->*&Test::value)(aptr) == 2); 91 BOOST_TEST((arg1->*&Test::func)(10)(aptr) == 10); 92 93 #ifdef BOOST_NO_CXX11_SMART_PTR 94 std::auto_ptr<const Test> captr(new Test(test)); 95 #else 96 std::unique_ptr<const Test> captr(new Test(test)); 97 #endif 98 99 BOOST_TEST((arg1->*&Test::value)(captr) == 2); 100 BOOST_TEST((arg1->*&Test::func)(11)(captr) == 11); 101 102 //boost::movelib::unique_ptr<Test> buptr(new Test(test)); 103 //BOOST_TEST((arg1->*&Test::value)(buptr) == 2); 104 //BOOST_TEST((arg1->*&Test::func)(12)(buptr) == 12); 105 106 107 return boost::report_errors(); 108 } 109