mirror of
https://github.com/yuzu-emu/ext-boost.git
synced 2025-01-05 17:35:41 +00:00
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
//-----------------------------------------------------------------------------
|
|
// boost variant/detail/apply_visitor_unary.hpp header file
|
|
// See http://www.boost.org for updates, documentation, and revision history.
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Copyright (c) 2002-2003
|
|
// Eric Friedman
|
|
//
|
|
// 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_APPLY_VISITOR_UNARY_HPP
|
|
#define BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
|
|
|
|
#include "boost/config.hpp"
|
|
#include "boost/detail/workaround.hpp"
|
|
#include "boost/variant/detail/generic_result_type.hpp"
|
|
|
|
#if BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302))
|
|
#include "boost/utility/enable_if.hpp"
|
|
#include "boost/mpl/not.hpp"
|
|
#include "boost/type_traits/is_const.hpp"
|
|
#endif
|
|
|
|
namespace boost {
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// function template apply_visitor(visitor, visitable)
|
|
//
|
|
// Visits visitable with visitor.
|
|
//
|
|
|
|
//
|
|
// nonconst-visitor version:
|
|
//
|
|
|
|
#if !BOOST_WORKAROUND(__EDG__, BOOST_TESTED_AT(302))
|
|
|
|
# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
|
|
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
|
|
/**/
|
|
|
|
#else // EDG-based compilers
|
|
|
|
# define BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(V) \
|
|
typename enable_if< \
|
|
mpl::not_< is_const< V > > \
|
|
, BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename V::result_type) \
|
|
>::type \
|
|
/**/
|
|
|
|
#endif // EDG-based compilers workaround
|
|
|
|
template <typename Visitor, typename Visitable>
|
|
inline
|
|
BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE(Visitor)
|
|
apply_visitor(Visitor& visitor, Visitable& visitable)
|
|
{
|
|
return visitable.apply_visitor(visitor);
|
|
}
|
|
|
|
#undef BOOST_VARIANT_AUX_APPLY_VISITOR_NON_CONST_RESULT_TYPE
|
|
|
|
//
|
|
// const-visitor version:
|
|
//
|
|
|
|
template <typename Visitor, typename Visitable>
|
|
inline
|
|
BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(typename Visitor::result_type)
|
|
apply_visitor(const Visitor& visitor, Visitable& visitable)
|
|
{
|
|
return visitable.apply_visitor(visitor);
|
|
}
|
|
|
|
} // namespace boost
|
|
|
|
#endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
|