PATH:
opt
/
cpanel
/
ea-ruby27
/
src
/
passenger-release-6.1.2
/
src
/
cxx_supportlib
/
vendor-modified
/
boost
////////////////////////////////////////////////////////////////////////////// // // (C) Copyright Ion Gaztanaga 2005. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // ////////////////////////////////////////////////////////////////////////////// #ifndef BOOST_POINTER_CAST_HPP #define BOOST_POINTER_CAST_HPP #include <memory> #include <type_traits> namespace boost { //static_pointer_cast overload for raw pointers template<class T, class U> inline T* static_pointer_cast(U *ptr) noexcept { return static_cast<T*>(ptr); } //dynamic_pointer_cast overload for raw pointers template<class T, class U> inline T* dynamic_pointer_cast(U *ptr) noexcept { return dynamic_cast<T*>(ptr); } //const_pointer_cast overload for raw pointers template<class T, class U> inline T* const_pointer_cast(U *ptr) noexcept { return const_cast<T*>(ptr); } //reinterpret_pointer_cast overload for raw pointers template<class T, class U> inline T* reinterpret_pointer_cast(U *ptr) noexcept { return reinterpret_cast<T*>(ptr); } //static_pointer_cast overload for std::shared_ptr using std::static_pointer_cast; //dynamic_pointer_cast overload for std::shared_ptr using std::dynamic_pointer_cast; //const_pointer_cast overload for std::shared_ptr using std::const_pointer_cast; //reinterpret_pointer_cast overload for std::shared_ptr template<class T, class U> std::shared_ptr<T> reinterpret_pointer_cast(const std::shared_ptr<U> & r ) noexcept { (void) reinterpret_cast< T* >( static_cast< U* >( 0 ) ); typedef typename std::shared_ptr<T>::element_type E; E * p = reinterpret_cast< E* >( r.get() ); return std::shared_ptr<T>( r, p ); } //static_pointer_cast overload for std::unique_ptr template<class T, class U> std::unique_ptr<T> static_pointer_cast( std::unique_ptr<U> && r ) noexcept { (void) static_cast< T* >( static_cast< U* >( 0 ) ); typedef typename std::unique_ptr<T>::element_type E; return std::unique_ptr<T>( static_cast<E*>( r.release() ) ); } //dynamic_pointer_cast overload for std::unique_ptr template<class T, class U> std::unique_ptr<T> dynamic_pointer_cast( std::unique_ptr<U> && r ) noexcept { (void) dynamic_cast< T* >( static_cast< U* >( 0 ) ); static_assert( std::has_virtual_destructor<T>::value, "The target of dynamic_pointer_cast must have a virtual destructor." ); T * p = dynamic_cast<T*>( r.get() ); if( p ) r.release(); return std::unique_ptr<T>( p ); } //const_pointer_cast overload for std::unique_ptr template<class T, class U> std::unique_ptr<T> const_pointer_cast( std::unique_ptr<U> && r ) noexcept { (void) const_cast< T* >( static_cast< U* >( 0 ) ); typedef typename std::unique_ptr<T>::element_type E; return std::unique_ptr<T>( const_cast<E*>( r.release() ) ); } //reinterpret_pointer_cast overload for std::unique_ptr template<class T, class U> std::unique_ptr<T> reinterpret_pointer_cast( std::unique_ptr<U> && r ) noexcept { (void) reinterpret_cast< T* >( static_cast< U* >( 0 ) ); typedef typename std::unique_ptr<T>::element_type E; return std::unique_ptr<T>( reinterpret_cast<E*>( r.release() ) ); } } // namespace boost #endif //BOOST_POINTER_CAST_HPP
[-] type.hpp
[edit]
[-] integer.hpp
[edit]
[-] ref.hpp
[edit]
[+]
move
[+]
libs
[+]
predef
[-] is_placeholder.hpp
[edit]
[+]
preprocessor
[-] none.hpp
[edit]
[+]
range
[+]
optional
[-] circular_buffer_fwd.hpp
[edit]
[-] utility.hpp
[edit]
[-] assert.hpp
[edit]
[-] aligned_storage.hpp
[edit]
[-] circular_buffer.hpp
[edit]
[+]
chrono
[-] pointer_cast.hpp
[edit]
[-] optional.hpp
[edit]
[+]
ratio
[-] foreach_fwd.hpp
[edit]
[-] regex.h
[edit]
[+]
describe
[+]
core
[-] foreach.hpp
[edit]
[-] exception_ptr.hpp
[edit]
[+]
tuple
[-] weak_ptr.hpp
[edit]
[+]
config
[+]
iterator
[-] config.hpp
[edit]
[+]
parameter
[+]
regex
[-] mem_fn.hpp
[edit]
[+]
function
[+]
date_time
[-] ratio.hpp
[edit]
[-] enable_shared_from_this.hpp
[edit]
[-] chrono.hpp
[edit]
[-] throw_exception.hpp
[edit]
[+]
pool
[-] thread.hpp
[edit]
[+]
unordered
[-] lexical_cast.hpp
[edit]
[-] regex_fwd.hpp
[edit]
[+]
thread
[-] shared_array.hpp
[edit]
[-] rational.hpp
[edit]
[-] limits.hpp
[edit]
[+]
utility
[+]
..
[-] function_equal.hpp
[edit]
[+]
random
[+]
type_traits
[+]
container
[-] make_shared.hpp
[edit]
[+]
container_hash
[-] none_t.hpp
[edit]
[-] predef.h
[edit]
[+]
atomic
[-] unordered_set.hpp
[edit]
[-] non_type.hpp
[edit]
[-] version.hpp
[edit]
[-] intrusive_ptr.hpp
[edit]
[+]
numeric
[+]
circular_buffer
[-] io_fwd.hpp
[edit]
[+]
mpl
[+]
typeof
[-] tokenizer.hpp
[edit]
[+]
concept
[+]
system
[-] next_prior.hpp
[edit]
[+]
lexical_cast
[+]
io
[+]
intrusive
[+]
mp11
[-] regex.hpp
[edit]
[-] function.hpp
[edit]
[+]
integer
[-] integer_fwd.hpp
[edit]
[-] static_assert.hpp
[edit]
[-] integer_traits.hpp
[edit]
[-] get_pointer.hpp
[edit]
[-] nondet_random.hpp
[edit]
[-] shared_ptr.hpp
[edit]
[-] current_function.hpp
[edit]
[-] token_iterator.hpp
[edit]
[+]
functional
[-] memory_order.hpp
[edit]
[+]
assert
[+]
detail
[-] atomic.hpp
[edit]
[-] cstdint.hpp
[edit]
[+]
exception
[-] operators.hpp
[edit]
[-] scoped_array.hpp
[edit]
[-] token_functions.hpp
[edit]
[+]
bind
[-] scoped_ptr.hpp
[edit]
[-] cregex.hpp
[edit]
[-] random.hpp
[edit]
[-] concept_check.hpp
[edit]
[+]
algorithm
[+]
smart_ptr
[-] noncopyable.hpp
[edit]
[-] unordered_map.hpp
[edit]
[-] visit_each.hpp
[edit]