12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- //-----------------------------------------------------------------------------
- // 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-2019 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/assert.hpp>
- #ifdef BOOST_MSVC
- # pragma warning( push )
- # pragma warning( disable : 4702 ) // unreachable code
- #endif
- namespace boost { namespace detail { namespace variant {
- ///////////////////////////////////////////////////////////////////////////////
- // (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 T
- forced_return()
- {
- // logical error: should never be here! (see above)
- BOOST_ASSERT(false);
- T (*dummy)() = 0;
- (void)dummy;
- BOOST_UNREACHABLE_RETURN(dummy());
- }
- }}} // namespace boost::detail::variant
- #ifdef BOOST_MSVC
- # pragma warning( pop )
- #endif
- #endif // BOOST_VARIANT_DETAIL_FORCED_RETURN_HPP
|