From 99e7406bd9bae6831c507ef653c0c8d2c446f022 Mon Sep 17 00:00:00 2001 From: Aleksey Gurtovoy Date: Sun, 27 Jan 2002 13:32:37 +0000 Subject: [PATCH] ref_ct_test.cpp [SVN r12524] --- ref_ct_test.cpp | 128 ------------------------------------------------ ref_test.cpp | 68 ++++--------------------- 2 files changed, 9 insertions(+), 187 deletions(-) delete mode 100644 ref_ct_test.cpp diff --git a/ref_ct_test.cpp b/ref_ct_test.cpp deleted file mode 100644 index 97fecc3..0000000 --- a/ref_ct_test.cpp +++ /dev/null @@ -1,128 +0,0 @@ -//----------------------------------------------------------------------------- -// ref_ct_test.cpp - compile-time test for "boost/ref.hpp" header content -// See http://www.boost.org for updates, documentation, and revision history. -//----------------------------------------------------------------------------- -// -// Copyright (c) 2002 -// Aleksey Gurtovoy -// -// Permission to use, copy, modify, distribute and sell this software -// and its documentation for any purpose is hereby granted without fee, -// provided that the above copyright notice appears in all copies and -// that both the copyright notice and this permission notice appear in -// supporting documentation. No representations are made about the -// suitability of this software for any purpose. It is provided "as is" -// without express or implied warranty. - -#include -#include -#include - -namespace { - -template< typename T, typename U > -void ref_test(boost::reference_wrapper) -{ - typedef typename boost::reference_wrapper::type type; - BOOST_STATIC_ASSERT((boost::is_same::value)); - BOOST_STATIC_ASSERT((boost::is_same::value)); -} - -template< typename T > -void assignable_test(T x) -{ - x = x; -} - -template< bool R, typename T > -void is_reference_wrapper_test(T) -{ - BOOST_STATIC_ASSERT(boost::is_reference_wrapper::value == R); -} - -template< typename R, typename Ref > -void cxx_reference_test(Ref) -{ - BOOST_STATIC_ASSERT((boost::is_same::value)); -} - -template< typename R, typename Ref > -void unwrap_reference_test(Ref) -{ - typedef typename boost::unwrap_reference::type type; - BOOST_STATIC_ASSERT((boost::is_same::value)); -} - -} // namespace - -int main() -{ - int i = 0; - int& ri = i; - - int const ci = 0; - int const& rci = ci; - - // 'ref/cref' functions test - ref_test(boost::ref(i)); - ref_test(boost::ref(ri)); - ref_test(boost::ref(ci)); - ref_test(boost::ref(rci)); - - ref_test(boost::cref(i)); - ref_test(boost::cref(ri)); - ref_test(boost::cref(ci)); - ref_test(boost::cref(rci)); - - // test 'assignable' requirement - assignable_test(boost::ref(i)); - assignable_test(boost::ref(ri)); - assignable_test(boost::cref(i)); - assignable_test(boost::cref(ci)); - assignable_test(boost::cref(rci)); - - // 'is_reference_wrapper' test - is_reference_wrapper_test(boost::ref(i)); - is_reference_wrapper_test(boost::ref(ri)); - is_reference_wrapper_test(boost::cref(i)); - is_reference_wrapper_test(boost::cref(ci)); - is_reference_wrapper_test(boost::cref(rci)); - - is_reference_wrapper_test(i); - is_reference_wrapper_test(ri); - is_reference_wrapper_test(ci); - is_reference_wrapper_test(rci); - - // ordinary references/function template arguments deduction test - cxx_reference_test(i); - cxx_reference_test(ri); - cxx_reference_test(ci); - cxx_reference_test(rci); - - cxx_reference_test(i); - cxx_reference_test(ri); - cxx_reference_test(i); - cxx_reference_test(ri); - cxx_reference_test(ci); - cxx_reference_test(rci); - - // 'unwrap_reference' test - unwrap_reference_test(boost::ref(i)); - unwrap_reference_test(boost::ref(ri)); - unwrap_reference_test(boost::cref(i)); - unwrap_reference_test(boost::cref(ci)); - unwrap_reference_test(boost::cref(rci)); - - unwrap_reference_test(i); - unwrap_reference_test(ri); - unwrap_reference_test(ci); - unwrap_reference_test(rci); - unwrap_reference_test(i); - unwrap_reference_test(ri); - unwrap_reference_test(i); - unwrap_reference_test(ri); - unwrap_reference_test(ci); - unwrap_reference_test(rci); - - return 0; -} diff --git a/ref_test.cpp b/ref_test.cpp index 24f9e98..1cfb5dd 100644 --- a/ref_test.cpp +++ b/ref_test.cpp @@ -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 -#include -#include #if defined(BOOST_MSVC) && (BOOST_MSVC < 1300) # pragma warning(push, 3) @@ -27,7 +29,7 @@ namespace { using namespace boost; template -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 - static void check_type_typedef(boost::reference_wrapper) - { - typedef typename boost::reference_wrapper::type type_typedef; - BOOST_TEST((boost::is_same::value)); - } - template static T* passthru(Arg x) { - check_type_typedef(x); return get_pointer(x); } template static T const* cref_passthru(Arg x) { - check_type_typedef(x); return get_const_pointer(x); } - template - static void test_unwrapped(Arg x) - { - typedef typename unwrap_reference::type unwrapped; - BOOST_TEST((is_same::value)); - } - - template struct select {}; - typedef select constant; - typedef select non_constant; - - static void cref_test(T x, constant) {} - - static void cref_test(T x, non_constant) - { - BOOST_TEST(is_reference_wrapper >::value); - BOOST_TEST(cref_passthru(cref(x)) == &x); - BOOST_TEST(&cref(x).get() == &x); - } - - BOOST_STATIC_CONSTANT( - bool, t_is_constant = boost::is_const::value); - static void test(T x) { BOOST_TEST(passthru(ref(x)) == &x); - - BOOST_TEST((is_same::type,T>::value)); - BOOST_TEST(&ref(x).get() == &x); - typedef reference_wrapper wrapped; - BOOST_TEST(is_reference_wrapper::value); - - typedef typename unwrap_reference::type unwrapped_wrapper; - BOOST_TEST((is_same::value)); - - typedef typename unwrap_reference::type unwrapped_self; - BOOST_TEST((is_same::value)); - - cref_test(x, select()); + 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::test(1); - wrapper::test(1); - BOOST_TEST(!is_reference_wrapper::value); - BOOST_TEST(!is_reference_wrapper::value); - BOOST_TEST(!is_reference_wrapper::value); - BOOST_TEST(!is_reference_wrapper::value); + ref_wrapper::test(1); + ref_wrapper::test(1); return 0; }