forked from boostorg/core
		
	Add boost::core::launder
This commit is contained in:
		
							
								
								
									
										55
									
								
								include/boost/core/launder.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								include/boost/core/launder.hpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
#ifndef BOOST_CORE_LAUNDER_HPP_INCLUDED
 | 
			
		||||
#define BOOST_CORE_LAUNDER_HPP_INCLUDED
 | 
			
		||||
 | 
			
		||||
// MS compatible compilers support #pragma once
 | 
			
		||||
 | 
			
		||||
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
 | 
			
		||||
# pragma once
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//  Copyright 2023 Peter Dimov
 | 
			
		||||
//  Distributed under the Boost Software License, Version 1.0.
 | 
			
		||||
//  https://www.boost.org/LICENSE_1_0.txt
 | 
			
		||||
 | 
			
		||||
#if defined(__has_builtin)
 | 
			
		||||
# if __has_builtin(__builtin_launder)
 | 
			
		||||
#  define BOOST_CORE_HAS_BUILTIN_LAUNDER
 | 
			
		||||
# endif
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if !defined(BOOST_CORE_HAS_BUILTIN_LAUNDER)
 | 
			
		||||
# include <new>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace boost
 | 
			
		||||
{
 | 
			
		||||
namespace core
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
#if defined(BOOST_CORE_HAS_BUILTIN_LAUNDER)
 | 
			
		||||
 | 
			
		||||
template<class T> T* launder( T* p )
 | 
			
		||||
{
 | 
			
		||||
    return __builtin_launder( p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#elif defined(__cpp_lib_launder)
 | 
			
		||||
 | 
			
		||||
template<class T> T* launder( T* p )
 | 
			
		||||
{
 | 
			
		||||
    return std::launder( p );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
template<class T> T* launder( T* p )
 | 
			
		||||
{
 | 
			
		||||
    return p;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
} // namespace core
 | 
			
		||||
} // namespace boost
 | 
			
		||||
 | 
			
		||||
#endif  // #ifndef BOOST_CORE_LAUNDER_HPP_INCLUDED
 | 
			
		||||
		Reference in New Issue
	
	Block a user