Chris@102: //----------------------------------------------------------------------------- Chris@102: // boost variant/detail/element_index.hpp header file Chris@102: // See http://www.boost.org for updates, documentation, and revision history. Chris@102: //----------------------------------------------------------------------------- Chris@102: // Chris@102: // Copyright (c) 2014-2015 Antony Polukhin Chris@102: // Chris@102: // Distributed under the Boost Software License, Version 1.0. (See Chris@102: // accompanying file LICENSE_1_0.txt or copy at Chris@102: // http://www.boost.org/LICENSE_1_0.txt) Chris@102: Chris@102: #ifndef BOOST_VARIANT_DETAIL_ELEMENT_INDEX_HPP Chris@102: #define BOOST_VARIANT_DETAIL_ELEMENT_INDEX_HPP Chris@102: Chris@102: #include "boost/config.hpp" Chris@102: #include "boost/variant/recursive_wrapper_fwd.hpp" Chris@102: #include "boost/variant/variant_fwd.hpp" Chris@102: Chris@102: #include "boost/mpl/find_if.hpp" Chris@102: Chris@102: namespace boost { namespace detail { namespace variant { Chris@102: Chris@102: template Chris@102: struct variant_element_functor : Chris@102: boost::mpl::or_< Chris@102: boost::is_same, Chris@102: boost::is_same >, Chris@102: boost::is_same Chris@102: > Chris@102: {}; Chris@102: Chris@102: template Chris@102: struct element_iterator_impl : Chris@102: boost::mpl::find_if< Chris@102: Types, Chris@102: boost::mpl::or_< Chris@102: variant_element_functor, Chris@102: variant_element_functor::type > Chris@102: > Chris@102: > Chris@102: {}; Chris@102: Chris@102: template Chris@102: struct element_iterator : Chris@102: element_iterator_impl< typename Variant::types, T> Chris@102: {}; Chris@102: Chris@102: template Chris@102: struct holds_element : Chris@102: boost::mpl::not_< Chris@102: boost::is_same< Chris@102: typename boost::mpl::end::type, Chris@102: typename element_iterator::type Chris@102: > Chris@102: > Chris@102: {}; Chris@102: Chris@102: Chris@102: }}} // namespace boost::detail::variant Chris@102: Chris@102: #endif // BOOST_VARIANT_DETAIL_ELEMENT_INDEX_HPP