diff options
Diffstat (limited to '3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp new file mode 100644 index 0000000..bdd69ad --- /dev/null +++ b/3rdParty/Boost/src/boost/variant/detail/over_sequence.hpp @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------------- +// 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 <typename Types> +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 <typename T> +struct is_over_sequence + : mpl::false_ +{ +}; + +template <typename Types> +struct is_over_sequence< over_sequence<Types> > + : 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<typename T> +yes_over_sequence_t is_over_sequence_test( + type< ::boost::detail::variant::over_sequence<T> > + ); + +template<typename T> +struct is_over_sequence_impl +{ + BOOST_STATIC_CONSTANT(bool, value = ( + sizeof(is_over_sequence_test(type<T>())) + == sizeof(yes_over_sequence_t) + )); +}; + +template <typename T> +struct is_over_sequence + : mpl::bool_< + ::boost::detail::variant::is_over_sequence_impl<T>::value + > +{ +}; + +#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION workaround + +}} // namespace detail::variant +} // namespace boost + +#endif // BOOST_VARIANT_DETAIL_OVER_SEQUENCE_HPP |