From 2598281d102932d3bdc81d48d1f2e3db49cc1872 Mon Sep 17 00:00:00 2001 From: Antony Polukhin Date: Thu, 10 Aug 2023 18:52:03 +0300 Subject: [PATCH] drop c++03 support --- CMakeLists.txt | 4 -- include/boost/implicit_cast.hpp | 19 ++-------- include/boost/polymorphic_cast.hpp | 38 ++++++------------- include/boost/polymorphic_pointer_cast.hpp | 43 +++++----------------- test/Jamfile.v2 | 6 +-- test/implicit_cast.cpp | 2 +- test/polymorphic_cast_test.cpp | 12 +----- 7 files changed, 30 insertions(+), 94 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57956cd..731bac9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,9 +14,5 @@ target_link_libraries( boost_conversion INTERFACE Boost::assert Boost::config - Boost::core - Boost::smart_ptr Boost::throw_exception - Boost::type_traits - Boost::typeof ) diff --git a/include/boost/implicit_cast.hpp b/include/boost/implicit_cast.hpp index c134d71..fa950c2 100644 --- a/include/boost/implicit_cast.hpp +++ b/include/boost/implicit_cast.hpp @@ -11,22 +11,9 @@ # pragma once #endif -#include -#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \ - defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || \ - defined(BOOST_NO_CXX11_CONSTEXPR) || \ - defined(BOOST_NO_CXX11_NULLPTR) || \ - defined(BOOST_NO_CXX11_NOEXCEPT) || \ - defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || \ - defined(BOOST_NO_CXX11_FINAL) || \ - defined(BOOST_NO_CXX11_ALIGNOF) || \ - defined(BOOST_NO_CXX11_STATIC_ASSERT) || \ - defined(BOOST_NO_CXX11_SMART_PTR) || \ - defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) || \ - defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) - -BOOST_PRAGMA_MESSAGE("C++03 support is deprecated in Boost.Conversion 1.82 and will be removed in Boost.Conversion 1.84.") +#if defined(BOOST_NO_CXX11_CONSTEXPR) +#error C++03 support is removed in Boost.Conversion 1.84 #endif namespace boost { @@ -46,7 +33,7 @@ template struct icast_identity // The use of identity creates a non-deduced form, so that the // explicit template argument must be supplied template -BOOST_CONSTEXPR inline T implicit_cast (typename boost::detail::icast_identity::type x) { +constexpr T implicit_cast (typename boost::detail::icast_identity::type x) { return x; } diff --git a/include/boost/polymorphic_cast.hpp b/include/boost/polymorphic_cast.hpp index 798e93b..a501cd0 100644 --- a/include/boost/polymorphic_cast.hpp +++ b/include/boost/polymorphic_cast.hpp @@ -49,38 +49,24 @@ #ifndef BOOST_POLYMORPHIC_CAST_HPP #define BOOST_POLYMORPHIC_CAST_HPP -# include +#include #ifdef BOOST_HAS_PRAGMA_ONCE # pragma once #endif -#include -#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \ - defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || \ - defined(BOOST_NO_CXX11_CONSTEXPR) || \ - defined(BOOST_NO_CXX11_NULLPTR) || \ - defined(BOOST_NO_CXX11_NOEXCEPT) || \ - defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || \ - defined(BOOST_NO_CXX11_FINAL) || \ - defined(BOOST_NO_CXX11_ALIGNOF) || \ - defined(BOOST_NO_CXX11_STATIC_ASSERT) || \ - defined(BOOST_NO_CXX11_SMART_PTR) || \ - defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) || \ - defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) - -BOOST_PRAGMA_MESSAGE("C++03 support is deprecated in Boost.Conversion 1.82 and will be removed in Boost.Conversion 1.84.") +#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) +#error C++03 support is removed in Boost.Conversion 1.84 #endif -# include -# include -# include -# include -# include -# include +# include +# include + +# include // std::addressof # include +# include namespace boost { @@ -129,13 +115,13 @@ namespace boost // Contributed by Julien Delacroix template - inline typename boost::enable_if_c< - boost::is_reference::value, Target + inline typename std::enable_if< + std::is_reference::value, Target >::type polymorphic_downcast(Source& x) { - typedef typename boost::remove_reference::type* target_pointer_type; + typedef typename std::remove_reference::type* target_pointer_type; return *boost::polymorphic_downcast( - boost::addressof(x) + std::addressof(x) ); } diff --git a/include/boost/polymorphic_pointer_cast.hpp b/include/boost/polymorphic_pointer_cast.hpp index cbf6719..f5d0726 100644 --- a/include/boost/polymorphic_pointer_cast.hpp +++ b/include/boost/polymorphic_pointer_cast.hpp @@ -15,31 +15,16 @@ # pragma once #endif +#if defined(BOOST_NO_CXX11_TEMPLATE_ALIASES) || defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || defined(BOOST_NO_CXX11_DECLTYPE) +#error C++03 support is removed in Boost.Conversion 1.84 +#endif + # include # include # include -# include -# ifdef BOOST_NO_CXX11_DECLTYPE -# include -# endif -#include -#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \ - defined(BOOST_NO_CXX11_AUTO_DECLARATIONS) || \ - defined(BOOST_NO_CXX11_CONSTEXPR) || \ - defined(BOOST_NO_CXX11_NULLPTR) || \ - defined(BOOST_NO_CXX11_NOEXCEPT) || \ - defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || \ - defined(BOOST_NO_CXX11_FINAL) || \ - defined(BOOST_NO_CXX11_ALIGNOF) || \ - defined(BOOST_NO_CXX11_STATIC_ASSERT) || \ - defined(BOOST_NO_CXX11_SMART_PTR) || \ - defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST) || \ - defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) +# include // std::declval -BOOST_PRAGMA_MESSAGE("C++03 support is deprecated in Boost.Conversion 1.82 and will be removed in Boost.Conversion 1.84.") - -#endif namespace boost { @@ -62,19 +47,11 @@ namespace boost namespace detail { template - struct dynamic_pointer_cast_result - { -#ifdef BOOST_NO_CXX11_DECLTYPE - BOOST_TYPEOF_NESTED_TYPEDEF_TPL(nested, dynamic_pointer_cast(boost::declval())) - typedef typename nested::type type; -#else - typedef decltype(dynamic_pointer_cast(boost::declval())) type; -#endif - }; + using dynamic_pointer_cast_result = decltype(dynamic_pointer_cast(std::declval())); } template - inline typename detail::dynamic_pointer_cast_result::type + inline detail::dynamic_pointer_cast_result polymorphic_pointer_downcast (const Source& x) { BOOST_ASSERT(dynamic_pointer_cast (x) == x); @@ -82,13 +59,11 @@ namespace boost } template - inline typename detail::dynamic_pointer_cast_result::type + inline detail::dynamic_pointer_cast_result polymorphic_pointer_cast (const Source& x) { - typename detail::dynamic_pointer_cast_result::type tmp - = dynamic_pointer_cast (x); + auto tmp = dynamic_pointer_cast (x); if ( !tmp ) boost::throw_exception( std::bad_cast() ); - return tmp; } diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index d90f03f..7e62b66 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -8,11 +8,11 @@ import testing ; import feature ; +import ../../config/checks/config : requires ; + project : requirements - gcc-4.7:-ftrapv - gcc-4.6:-ftrapv - clang:-ftrapv + [ requires cxx11 ] # default to all warnings on: all # set warnings as errors for those compilers we know we get warning free: diff --git a/test/implicit_cast.cpp b/test/implicit_cast.cpp index ea56f66..41edc5d 100644 --- a/test/implicit_cast.cpp +++ b/test/implicit_cast.cpp @@ -35,7 +35,7 @@ int main() (void)z; - BOOST_CONSTEXPR long value = boost::implicit_cast(42); + constexpr long value = boost::implicit_cast(42); BOOST_TEST(value == 42L); return boost::report_errors(); diff --git a/test/polymorphic_cast_test.cpp b/test/polymorphic_cast_test.cpp index 5bb0699..498f36f 100644 --- a/test/polymorphic_cast_test.cpp +++ b/test/polymorphic_cast_test.cpp @@ -6,6 +6,7 @@ // Copyright 1999 Dave Abrahams // Copyright 2014 Peter Dimov // Copyright 2014 Boris Rasin, Antony Polukhin +// Copyright 2023 Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. // @@ -237,8 +238,6 @@ static void test_polymorphic_pointer_downcast_intrusive() } } -#ifndef BOOST_NO_CXX11_SMART_PTR - static void test_polymorphic_pointer_downcast_std_shared() { std::shared_ptr base (new Derived); @@ -253,8 +252,6 @@ static void test_polymorphic_pointer_downcast_std_shared() } } -#endif - static void test_polymorphic_cast_fail() { Base * base = new Base; @@ -272,9 +269,7 @@ static void test_polymorphic_pointer_cast_fail() BOOST_TEST_THROWS( boost::polymorphic_pointer_cast( boost::shared_ptr(new Base) ), std::bad_cast ); -#ifndef BOOST_NO_CXX11_SMART_PTR BOOST_TEST_THROWS( boost::polymorphic_pointer_cast( std::shared_ptr(new Base) ), std::bad_cast ); -#endif BOOST_TEST_THROWS( boost::polymorphic_pointer_cast( boost::intrusive_ptr(new Base) ), std::bad_cast ); } @@ -337,7 +332,6 @@ static void test_polymorphic_pointer_downcast_boost_shared_fail() expect_assertion = false; } -#ifndef BOOST_NO_CXX11_SMART_PTR static void test_polymorphic_pointer_downcast_std_shared_fail() { @@ -352,7 +346,6 @@ static void test_polymorphic_pointer_downcast_std_shared_fail() expect_assertion = false; } -#endif static void test_polymorphic_pointer_downcast_intrusive_fail() { @@ -382,10 +375,9 @@ int main() test_polymorphic_pointer_downcast_boost_shared_fail(); test_polymorphic_pointer_downcast_intrusive_fail(); -#ifndef BOOST_NO_CXX11_SMART_PTR test_polymorphic_pointer_downcast_std_shared(); test_polymorphic_pointer_downcast_std_shared_fail(); -#endif + return boost::report_errors(); }