1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <functional> 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT) 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <typeinfo> 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h" 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottusing namespace std; 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass RefWrapperTest : 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott public CPPUNIT_NS::TestCase 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE(RefWrapperTest); 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(ref); 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST(cref); 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_TEST_SUITE_END(); 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott protected: 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void ref(); 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void cref(); 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest); 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid RefWrapperTest::ref() 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef std::tr1::reference_wrapper<int> rr_type; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) ); 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) ); 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i = 1; 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int j = 2; 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott rr_type r1 = std::tr1::ref(i); 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 1 ); 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott r1 = std::tr1::ref(j); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 2 ); 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i = 3; 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 2 ); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott j = 4; 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 4 ); 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott r1.get() = 5; 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( j == 5 ); 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid RefWrapperTest::cref() 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef std::tr1::reference_wrapper<const int> crr_type; 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) ); 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) ); 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int i = 1; 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott int j = 2; 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott crr_type r1 = std::tr1::cref(i); 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 1 ); 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott r1 = std::tr1::cref(j); 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 2 ); 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott i = 3; 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 2 ); 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott j = 4; 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott CPPUNIT_CHECK( r1.get() == 4 ); 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */ 86