//----------------------------------------------------------------------------- // boost variant/detail/over_sequence.hpp header file // See http://www.boost.org for updates, documentation, and revision history. //----------------------------------------------------------------------------- // // Copyright (c) 2003 // Eric Friedman // // Portions Copyright (C) 2002 David Abrahams // // 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_OVER_SEQUENCE_HPP #define BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP #include "boost/mpl/aux_/config/ctps.hpp" #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) # include "boost/mpl/eval_if.hpp" # include "boost/mpl/bool.hpp" # include "boost/mpl/identity.hpp" # include "boost/type.hpp" #endif namespace boost { namespace detail { namespace variant { /////////////////////////////////////////////////////////////////////////////// // (detail) class over_sequence // // Wrapper used to indicate bounded types for variant are from type sequence. // template struct over_sequence { typedef Types type; }; /////////////////////////////////////////////////////////////////////////////// // (detail) metafunction is_over_sequence (modeled on code by David Abrahams) // // Indicates whether the specified type is of form over_sequence<...> or not. // #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template struct is_over_sequence : mpl::false_ { }; template struct is_over_sequence< over_sequence > : mpl::true_ { }; #else // defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) typedef char (&yes_over_sequence_t)[1]; typedef char (&no_over_sequence_t)[2]; no_over_sequence_t is_over_sequence_test(...); template yes_over_sequence_t is_over_sequence_test( type< ::boost::detail::variant::over_sequence > ); template struct is_over_sequence_impl { BOOST_STATIC_CONSTANT(bool, value = ( sizeof(is_over_sequence_test(type())) == sizeof(yes_over_sequence_t) )); }; template struct is_over_sequence : mpl::bool_< ::boost::detail::variant::is_over_sequence_impl::value > { }; #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround }} // namespace detail::variant } // namespace boost #endif // BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP