ref_ct_test.cpp

[SVN r12524]
This commit is contained in:
Aleksey Gurtovoy
2002-01-27 13:32:37 +00:00
parent 413265f497
commit 99e7406bd9
2 changed files with 9 additions and 187 deletions

View File

@ -1,3 +1,7 @@
// run-time test for "boost/ref.hpp" header content
// see 'ref_ct_test.cpp' for compile-time part
#if defined(_MSC_VER) && !defined(__ICL)
# pragma warning(disable: 4786) // identifier truncated in debug info
# pragma warning(disable: 4710) // function not inlined
@ -6,8 +10,6 @@
#endif
#include <boost/ref.hpp>
#include <boost/type_traits.hpp>
#include <boost/pending/ct_if.hpp>
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
# pragma warning(push, 3)
@ -27,7 +29,7 @@ namespace {
using namespace boost;
template <class T>
struct wrapper
struct ref_wrapper
{
// Used to verify implicit conversion
static T* get_pointer(T& x)
@ -40,73 +42,25 @@ struct wrapper
return &x;
}
static void check_type_typedef(...)
{
BOOST_ERROR("expected a reference_wrapper argument");
}
template <class U>
static void check_type_typedef(boost::reference_wrapper<U>)
{
typedef typename boost::reference_wrapper<U>::type type_typedef;
BOOST_TEST((boost::is_same<type_typedef,U>::value));
}
template <class Arg>
static T* passthru(Arg x)
{
check_type_typedef(x);
return get_pointer(x);
}
template <class Arg>
static T const* cref_passthru(Arg x)
{
check_type_typedef(x);
return get_const_pointer(x);
}
template <class Arg>
static void test_unwrapped(Arg x)
{
typedef typename unwrap_reference<Arg>::type unwrapped;
BOOST_TEST((is_same<Arg,unwrapped>::value));
}
template <bool is_constant> struct select {};
typedef select<true> constant;
typedef select<false> non_constant;
static void cref_test(T x, constant) {}
static void cref_test(T x, non_constant)
{
BOOST_TEST(is_reference_wrapper<reference_wrapper<T const> >::value);
BOOST_TEST(cref_passthru(cref(x)) == &x);
BOOST_TEST(&cref(x).get() == &x);
}
BOOST_STATIC_CONSTANT(
bool, t_is_constant = boost::is_const<T>::value);
static void test(T x)
{
BOOST_TEST(passthru(ref(x)) == &x);
BOOST_TEST((is_same<reference_wrapper<T>::type,T>::value));
BOOST_TEST(&ref(x).get() == &x);
typedef reference_wrapper<T> wrapped;
BOOST_TEST(is_reference_wrapper<wrapped>::value);
typedef typename unwrap_reference<wrapped>::type unwrapped_wrapper;
BOOST_TEST((is_same<T,unwrapped_wrapper>::value));
typedef typename unwrap_reference<T>::type unwrapped_self;
BOOST_TEST((is_same<T,unwrapped_self>::value));
cref_test(x, select<t_is_constant>());
BOOST_TEST(cref_passthru(cref(x)) == &x);
BOOST_TEST(&cref(x).get() == &x);
}
};
@ -114,11 +68,7 @@ struct wrapper
int test_main(int, char * [])
{
wrapper<int>::test(1);
wrapper<int const>::test(1);
BOOST_TEST(!is_reference_wrapper<int>::value);
BOOST_TEST(!is_reference_wrapper<int&>::value);
BOOST_TEST(!is_reference_wrapper<int const>::value);
BOOST_TEST(!is_reference_wrapper<int const&>::value);
ref_wrapper<int>::test(1);
ref_wrapper<int const>::test(1);
return 0;
}