1 // Copyright Peter Dimov and David Abrahams 2002. 2 // Distributed under the Boost Software License, Version 1.0. (See 3 // accompanying file LICENSE_1_0.txt or copy at 4 // http://www.boost.org/LICENSE_1_0.txt) 5 #ifndef GET_POINTER_DWA20021219_HPP 6 #define GET_POINTER_DWA20021219_HPP 7 8 #include <boost/config.hpp> 9 10 // In order to avoid circular dependencies with Boost.TR1 11 // we make sure that our include of <memory> doesn't try to 12 // pull in the TR1 headers: that's why we use this header 13 // rather than including <memory> directly: 14 #include <boost/config/no_tr1/memory.hpp> // std::auto_ptr 15 16 namespace boost { 17 18 // get_pointer(p) extracts a ->* capable pointer from p 19 get_pointer(T * p)20template<class T> T * get_pointer(T * p) 21 { 22 return p; 23 } 24 25 // get_pointer(shared_ptr<T> const & p) has been moved to shared_ptr.hpp 26 27 #if !defined( BOOST_NO_AUTO_PTR ) 28 29 #if defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L)) 30 #if defined( BOOST_GCC ) 31 #if BOOST_GCC >= 40600 32 #define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS 33 #endif // BOOST_GCC >= 40600 34 #elif defined( __clang__ ) && defined( __has_warning ) 35 #if __has_warning("-Wdeprecated-declarations") 36 #define BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS 37 #endif // __has_warning("-Wdeprecated-declarations") 38 #endif 39 #endif // defined( __GNUC__ ) && (defined( __GXX_EXPERIMENTAL_CXX0X__ ) || (__cplusplus >= 201103L)) 40 41 #if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS ) 42 // Disable libstdc++ warnings about std::auto_ptr being deprecated in C++11 mode 43 #pragma GCC diagnostic push 44 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 45 #define BOOST_CORE_DETAIL_DISABLED_DEPRECATED_WARNINGS 46 #endif 47 get_pointer(std::auto_ptr<T> const & p)48template<class T> T * get_pointer(std::auto_ptr<T> const& p) 49 { 50 return p.get(); 51 } 52 53 #if defined( BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS ) 54 #pragma GCC diagnostic pop 55 #undef BOOST_CORE_DETAIL_DISABLE_LIBSTDCXX_DEPRECATED_WARNINGS 56 #endif 57 58 #endif // !defined( BOOST_NO_AUTO_PTR ) 59 60 #if !defined( BOOST_NO_CXX11_SMART_PTR ) 61 get_pointer(std::unique_ptr<T> const & p)62template<class T> T * get_pointer( std::unique_ptr<T> const& p ) 63 { 64 return p.get(); 65 } 66 get_pointer(std::shared_ptr<T> const & p)67template<class T> T * get_pointer( std::shared_ptr<T> const& p ) 68 { 69 return p.get(); 70 } 71 72 #endif 73 74 } // namespace boost 75 76 #endif // GET_POINTER_DWA20021219_HPP 77