summaryrefslogtreecommitdiff
path: root/libs/smart_ptr/test/sp_convertible_test2.cpp
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:24:46 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2017-09-13 11:25:39 +0900
commit4fadd968fa12130524c8380f33fcfe25d4de79e5 (patch)
treefd26a490cd15388d42fc6652b3c5c13012e7f93e /libs/smart_ptr/test/sp_convertible_test2.cpp
parentb5c87084afaef42b2d058f68091be31988a6a874 (diff)
downloadboost-4fadd968fa12130524c8380f33fcfe25d4de79e5.tar.gz
boost-4fadd968fa12130524c8380f33fcfe25d4de79e5.tar.bz2
boost-4fadd968fa12130524c8380f33fcfe25d4de79e5.zip
Imported Upstream version 1.65.0upstream/1.65.0
Change-Id: Icf8400b375482cb11bcf77440a6934ba360d6ba4 Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'libs/smart_ptr/test/sp_convertible_test2.cpp')
-rw-r--r--libs/smart_ptr/test/sp_convertible_test2.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/libs/smart_ptr/test/sp_convertible_test2.cpp b/libs/smart_ptr/test/sp_convertible_test2.cpp
new file mode 100644
index 0000000000..7635d82731
--- /dev/null
+++ b/libs/smart_ptr/test/sp_convertible_test2.cpp
@@ -0,0 +1,108 @@
+#include <boost/config.hpp>
+
+// sp_convertible_test2.cpp
+//
+// Copyright 2012, 2017 Peter Dimov
+//
+// Distributed under the Boost Software License, Version 1.0.
+// See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt
+
+#include <boost/shared_ptr.hpp>
+#include <boost/weak_ptr.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <boost/type_traits/is_convertible.hpp>
+
+//
+
+class X;
+
+class B
+{
+};
+
+class D: public B
+{
+};
+
+using boost::is_convertible;
+
+#define TEST_CV_TRUE_( S1, T, S2, U ) \
+ BOOST_TEST(( is_convertible< S1<T>, S2<U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<const U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<volatile U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<const volatile U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<const U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<const volatile U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<volatile U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<const volatile U> >::value == true )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<const volatile U> >::value == true ));
+
+#define TEST_CV_FALSE_( S1, T, S2, U ) \
+ BOOST_TEST(( is_convertible< S1<T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<T>, S2<const volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const T>, S2<const volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<volatile T>, S2<const volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<const U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<volatile U> >::value == false )); \
+ BOOST_TEST(( is_convertible< S1<const volatile T>, S2<const volatile U> >::value == false ));
+
+using boost::shared_ptr;
+using boost::weak_ptr;
+
+#define TEST_CV_TRUE( T, U ) \
+ TEST_CV_TRUE_( shared_ptr, T, shared_ptr, U ) \
+ TEST_CV_TRUE_( shared_ptr, T, weak_ptr, U ) \
+ TEST_CV_TRUE_( weak_ptr, T, weak_ptr, U )
+
+#define TEST_CV_FALSE( T, U ) \
+ TEST_CV_FALSE_( shared_ptr, T, shared_ptr, U ) \
+ TEST_CV_FALSE_( shared_ptr, T, weak_ptr, U ) \
+ TEST_CV_FALSE_( weak_ptr, T, weak_ptr, U )
+
+int main()
+{
+#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
+
+ TEST_CV_TRUE( X, X )
+ TEST_CV_TRUE( X, void )
+ TEST_CV_FALSE( void, X )
+ TEST_CV_TRUE( D, B )
+ TEST_CV_FALSE( B, D )
+
+ TEST_CV_TRUE( X[], X[] )
+ TEST_CV_FALSE( D[], B[] )
+
+ TEST_CV_TRUE( X[3], X[3] )
+ TEST_CV_FALSE( X[3], X[4] )
+ TEST_CV_FALSE( D[3], B[3] )
+
+ TEST_CV_TRUE( X[3], X[] )
+ TEST_CV_FALSE( X[], X[3] )
+
+ TEST_CV_TRUE( X[], void )
+ TEST_CV_FALSE( void, X[] )
+
+ TEST_CV_TRUE( X[3], void )
+ TEST_CV_FALSE( void, X[3] )
+
+#endif
+
+ return boost::report_errors();
+}