1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //-----------------------------------------------------------------------------
- // 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:
- //
- #if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
- 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);
- }
- #endif // MSVC7 and below exclusion
- } // namespace boost
- #endif // BOOST_VARIANT_DETAIL_APPLY_VISITOR_UNARY_HPP
|