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 | |
20 | template<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 | |
48 | template<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 | |
62 | template<class T> T * get_pointer( std::unique_ptr<T> const& p ) |
63 | { |
64 | return p.get(); |
65 | } |
66 | |
67 | template<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 | |