1 #include <boost/config.hpp> 2 3 #if defined(BOOST_MSVC) 4 #pragma warning(disable: 4786) // identifier truncated in debug info 5 #pragma warning(disable: 4710) // function not inlined 6 #pragma warning(disable: 4711) // function selected for automatic inline expansion 7 #pragma warning(disable: 4514) // unreferenced inline removed 8 #endif 9 10 // 11 // bind_rv_sp_test.cpp - smart pointer returned by value from an inner bind 12 // 13 // Copyright (c) 2005 Peter Dimov 14 // 15 // Distributed under the Boost Software License, Version 1.0. (See 16 // accompanying file LICENSE_1_0.txt or copy at 17 // http://www.boost.org/LICENSE_1_0.txt) 18 // 19 20 #include <boost/bind.hpp> 21 22 #if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) 23 #pragma warning(push, 3) 24 #endif 25 26 #include <iostream> 27 28 #if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) 29 #pragma warning(pop) 30 #endif 31 32 #include <boost/detail/lightweight_test.hpp> 33 #include <boost/shared_ptr.hpp> 34 35 struct X 36 { 37 int v_; 38 XX39 X( int v ): v_( v ) 40 { 41 } 42 fX43 int f() 44 { 45 return v_; 46 } 47 }; 48 49 struct Y 50 { fY51 boost::shared_ptr<X> f() 52 { 53 return boost::shared_ptr<X>( new X( 42 ) ); 54 } 55 }; 56 main()57int main() 58 { 59 Y y; 60 61 BOOST_TEST( boost::bind( &X::f, boost::bind( &Y::f, &y ) )() == 42 ); 62 63 return boost::report_errors(); 64 } 65