#include <functional>
#if !defined(_STLP_NO_EXTENSIONS) && defined(_STLP_USE_BOOST_SUPPORT)
#include <typeinfo>
#include "cppunit/cppunit_proxy.h"
#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
using namespace std;
#endif
class RefWrapperTest :
public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(RefWrapperTest);
CPPUNIT_TEST(ref);
CPPUNIT_TEST(cref);
CPPUNIT_TEST_SUITE_END();
protected:
void ref();
void cref();
};
CPPUNIT_TEST_SUITE_REGISTRATION(RefWrapperTest);
void RefWrapperTest::ref()
{
typedef std::tr1::reference_wrapper<int> rr_type;
CPPUNIT_CHECK( (::boost::is_convertible<rr_type, int&>::value) );
CPPUNIT_CHECK( (::boost::is_same<rr_type::type, int>::value) );
int i = 1;
int j = 2;
rr_type r1 = std::tr1::ref(i);
CPPUNIT_CHECK( r1.get() == 1 );
r1 = std::tr1::ref(j);
CPPUNIT_CHECK( r1.get() == 2 );
i = 3;
CPPUNIT_CHECK( r1.get() == 2 );
j = 4;
CPPUNIT_CHECK( r1.get() == 4 );
r1.get() = 5;
CPPUNIT_CHECK( j == 5 );
}
void RefWrapperTest::cref()
{
typedef std::tr1::reference_wrapper<const int> crr_type;
CPPUNIT_CHECK( (::boost::is_convertible<crr_type, const int&>::value) );
CPPUNIT_CHECK( (::boost::is_same<crr_type::type, const int>::value) );
int i = 1;
int j = 2;
crr_type r1 = std::tr1::cref(i);
CPPUNIT_CHECK( r1.get() == 1 );
r1 = std::tr1::cref(j);
CPPUNIT_CHECK( r1.get() == 2 );
i = 3;
CPPUNIT_CHECK( r1.get() == 2 );
j = 4;
CPPUNIT_CHECK( r1.get() == 4 );
}
#endif /* !_STLP_NO_EXTENSIONS && _STLP_USE_BOOST_SUPPORT */