diff --git a/include/boost/polymorphic_pointer_cast.hpp b/include/boost/polymorphic_pointer_cast.hpp index 1ab5d23..8dd3972 100644 --- a/include/boost/polymorphic_pointer_cast.hpp +++ b/include/boost/polymorphic_pointer_cast.hpp @@ -19,8 +19,6 @@ # include # include -# include // std::declval - namespace boost { @@ -40,23 +38,17 @@ namespace boost // Contributed by Boris Rasin - namespace detail - { - template - using dynamic_pointer_cast_result = decltype(dynamic_pointer_cast(std::declval())); - } - template - inline detail::dynamic_pointer_cast_result - polymorphic_pointer_downcast (const Source& x) + inline auto polymorphic_pointer_downcast (const Source& x) + -> decltype(static_pointer_cast(x)) { BOOST_ASSERT(dynamic_pointer_cast (x) == x); return static_pointer_cast (x); } template - inline detail::dynamic_pointer_cast_result - polymorphic_pointer_cast (const Source& x) + inline auto polymorphic_pointer_cast (const Source& x) + -> decltype(dynamic_pointer_cast(x)) { auto tmp = dynamic_pointer_cast (x); if ( !tmp ) boost::throw_exception( std::bad_cast() );