123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #ifndef BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
- #define BOOST_CONVERSION_POLYMORPHIC_POINTER_CAST_HPP
- #include <boost/config.hpp>
- #ifdef BOOST_HAS_PRAGMA_ONCE
- # pragma once
- #endif
- # include <boost/assert.hpp>
- # include <boost/pointer_cast.hpp>
- # include <boost/throw_exception.hpp>
- namespace boost
- {
-
-
-
-
-
-
-
-
- template <typename Target, typename Source>
- inline auto polymorphic_pointer_downcast (const Source& x)
- -> decltype(static_pointer_cast<Target>(x))
- {
- BOOST_ASSERT(dynamic_pointer_cast<Target> (x) == x);
- return static_pointer_cast<Target> (x);
- }
- template <typename Target, typename Source>
- inline auto polymorphic_pointer_cast (const Source& x)
- -> decltype(dynamic_pointer_cast<Target>(x))
- {
- auto tmp = dynamic_pointer_cast<Target> (x);
- if ( !tmp ) boost::throw_exception( std::bad_cast() );
- return tmp;
- }
- }
- #endif
|