Mercurial > hg > vamp-build-and-test
view DEPENDENCIES/generic/include/boost/fusion/algorithm/query/detail/count.hpp @ 99:5f61994de79a emscripten
Update subrepos
author | Chris Cannam |
---|---|
date | Fri, 04 Sep 2015 10:46:42 +0100 |
parents | 2665513ce2d3 |
children | c530137014c0 |
line wrap: on
line source
/*============================================================================= Copyright (c) 2001-2011 Joel de Guzman 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) ==============================================================================*/ #if !defined(FUSION_COUNT_09162005_0158) #define FUSION_COUNT_09162005_0158 #include <boost/config.hpp> #include <boost/mpl/or.hpp> #include <boost/type_traits/is_convertible.hpp> #include <boost/fusion/support/detail/access.hpp> #if defined (BOOST_MSVC) # pragma warning(push) # pragma warning (disable: 4512) // assignment operator could not be generated. #endif namespace boost { namespace fusion { namespace detail { template <bool is_convertible> struct compare_convertible; // T1 is convertible to T2 or vice versa template <> struct compare_convertible<true> { template <typename T1, typename T2> static bool call(T1 const& x, T2 const& y) { return x == y; } }; // T1 is NOT convertible to T2 NOR vice versa template <> struct compare_convertible<false> { template <typename T1, typename T2> static bool call(T1 const&, T2 const&) { return false; } }; template <typename T1> struct count_compare { typedef typename detail::call_param<T1>::type param; count_compare(param in_x) : x(in_x) {} template <typename T2> bool operator()(T2 const& y) { return compare_convertible< mpl::or_< is_convertible<T1, T2> , is_convertible<T2, T1> >::value >::call(x, y); } param x; }; }}} #if defined (BOOST_MSVC) # pragma warning(pop) #endif #endif