| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | /*=============================================================================    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_EMPTY_09162005_0335)#define FUSION_EMPTY_09162005_0335#include <boost/fusion/support/config.hpp>#include <boost/fusion/sequence/intrinsic_fwd.hpp>#include <boost/fusion/sequence/intrinsic/size.hpp>#include <boost/mpl/bool.hpp>#include <boost/fusion/support/tag_of.hpp>namespace boost { namespace fusion{    // Special tags:    struct sequence_facade_tag;    struct mpl_sequence_tag; // mpl sequence tag    namespace extension    {        template <typename Tag>        struct empty_impl        {            template <typename Sequence>            struct apply                 : mpl::bool_<(result_of::size<Sequence>::value == 0)>            {};        };        template <>        struct empty_impl<sequence_facade_tag>        {            template <typename Sequence>            struct apply : Sequence::template empty<Sequence> {};        };        template <>        struct empty_impl<mpl_sequence_tag>;    }    namespace result_of    {        template <typename Sequence>        struct empty             : extension::empty_impl<typename detail::tag_of<Sequence>::type>::                template apply<Sequence>        {};    }    template <typename Sequence>    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED    inline typename result_of::empty<Sequence>::type    empty(Sequence const&)    {        typedef typename result_of::empty<Sequence>::type result;        return result();    }}}#endif
 |