/////////////////////////////////////////////////////////////////////////////// // any.hpp // // Copyright 2008 Eric Niebler. 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_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 #define BOOST_XPRESSIVE_DETAIL_UTILITY_ANY_HPP_EAN_11_19_2005 #include #if BOOST_VERSION >= 103300 // In Boost 1.33+, we have a cons list in Fusion, so just include it. # if BOOST_VERSION >= 103500 # include // Boost 1.35+ has Fusion2 # else # include // Fusion1 # endif #else # include # include # include # include # include # include # include namespace boost { namespace fusion { namespace detail { template inline bool any(First const&, Last const&, F const&, mpl::true_) { return false; } template inline bool any(First const& first, Last const& last, F const& f, mpl::false_) { if(f(*first)) return true; return detail::any(fusion::next(first), last, f , meta::equal_to::type, Last>()); } } namespace meta { template struct any { typedef bool type; }; } namespace function { struct any { template struct apply { typedef bool type; }; template inline bool operator()(Sequence const& seq, F const& f) const { return detail::any( fusion::begin(seq) , fusion::end(seq) , f , meta::equal_to< BOOST_DEDUCED_TYPENAME meta::begin::type , BOOST_DEDUCED_TYPENAME meta::end::type>()); } template inline bool operator()(Sequence& seq, F const& f) const { return detail::any( fusion::begin(seq) , fusion::end(seq) , f , meta::equal_to< BOOST_DEDUCED_TYPENAME meta::begin::type , BOOST_DEDUCED_TYPENAME meta::end::type>()); } }; } function::any const any = function::any(); }} #endif #endif