forked from boostorg/utility
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
 | 
						|
#define BOOST_CHECKED_DELETE_HPP_INCLUDED
 | 
						|
 | 
						|
// MS compatible compilers support #pragma once
 | 
						|
 | 
						|
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
 | 
						|
# pragma once
 | 
						|
#endif
 | 
						|
 | 
						|
//
 | 
						|
//  boost/checked_delete.hpp
 | 
						|
//
 | 
						|
//  Copyright (c) 2002, 2003 Peter Dimov
 | 
						|
//  Copyright (c) 2003 Daniel Frey
 | 
						|
//  Copyright (c) 2003 Howard Hinnant
 | 
						|
//
 | 
						|
//  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)
 | 
						|
//
 | 
						|
//  See http://www.boost.org/libs/utility/checked_delete.html for documentation.
 | 
						|
//
 | 
						|
 | 
						|
namespace boost
 | 
						|
{
 | 
						|
 | 
						|
// verify that types are complete for increased safety
 | 
						|
 | 
						|
template<class T> inline void checked_delete(T * x)
 | 
						|
{
 | 
						|
    // intentionally complex - simplification causes regressions
 | 
						|
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
 | 
						|
    (void) sizeof(type_must_be_complete);
 | 
						|
    delete x;
 | 
						|
}
 | 
						|
 | 
						|
template<class T> inline void checked_array_delete(T * x)
 | 
						|
{
 | 
						|
    typedef char type_must_be_complete[ sizeof(T)? 1: -1 ];
 | 
						|
    (void) sizeof(type_must_be_complete);
 | 
						|
    delete [] x;
 | 
						|
}
 | 
						|
 | 
						|
template<class T> struct checked_deleter
 | 
						|
{
 | 
						|
    typedef void result_type;
 | 
						|
    typedef T * argument_type;
 | 
						|
 | 
						|
    void operator()(T * x) const
 | 
						|
    {
 | 
						|
        // boost:: disables ADL
 | 
						|
        boost::checked_delete(x);
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
template<class T> struct checked_array_deleter
 | 
						|
{
 | 
						|
    typedef void result_type;
 | 
						|
    typedef T * argument_type;
 | 
						|
 | 
						|
    void operator()(T * x) const
 | 
						|
    {
 | 
						|
        boost::checked_array_delete(x);
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
} // namespace boost
 | 
						|
 | 
						|
#endif  // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
 |