65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | //----------------------------------------------------------------------------- | ||
|  | // boost variant/detail/forced_return.hpp header file | ||
|  | // See http://www.boost.org for updates, documentation, and revision history. | ||
|  | //----------------------------------------------------------------------------- | ||
|  | // | ||
|  | // Copyright (c) 2003 Eric Friedman | ||
|  | // Copyright (c) 2015-2016 Antony Polukhin | ||
|  | // | ||
|  | // 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_VARIANT_DETAIL_FORCED_RETURN_HPP | ||
|  | #define BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP | ||
|  | 
 | ||
|  | #include <boost/config.hpp> | ||
|  | #include <boost/variant/detail/generic_result_type.hpp> | ||
|  | #include <boost/assert.hpp> | ||
|  | #include <cstdlib> // std::abort | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef BOOST_MSVC | ||
|  | # pragma warning( push ) | ||
|  | # pragma warning( disable : 4702 ) // unreachable code | ||
|  | #endif | ||
|  | 
 | ||
|  | namespace boost { namespace detail { namespace variant { | ||
|  | 
 | ||
|  | BOOST_NORETURN inline void forced_return_no_return() { // fixes `must return a value` warnings | ||
|  |     using namespace std; | ||
|  |     abort(); // some implementations have no std::abort | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | // (detail) function template forced_return | ||
|  | // | ||
|  | // Logical error to permit invocation at runtime, but (artificially) satisfies | ||
|  | // compile-time requirement of returning a result value. | ||
|  | // | ||
|  | template <typename T> | ||
|  | BOOST_NORETURN inline | ||
|  |     BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) | ||
|  | forced_return() | ||
|  | { | ||
|  |     // logical error: should never be here! (see above) | ||
|  |     BOOST_ASSERT(false); | ||
|  | 
 | ||
|  |     forced_return_no_return(); | ||
|  | 
 | ||
|  | #ifdef BOOST_NO_NORETURN | ||
|  |     BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(T) (*dummy)() = 0; | ||
|  |     return dummy(); | ||
|  | #endif | ||
|  | } | ||
|  | 
 | ||
|  | }}} // namespace boost::detail::variant | ||
|  | 
 | ||
|  | 
 | ||
|  | #ifdef BOOST_MSVC | ||
|  | # pragma warning( pop ) | ||
|  | #endif | ||
|  | 
 | ||
|  | #endif // BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP |