/*============================================================================= Copyright (c) 2001-2014 Joel de Guzman http://spirit.sourceforge.net/ 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(BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM) #define BOOST_SPIRIT_X3_VARIANT_HAS_SUBSTITUTE_APR_18_2014_925AM #include #include namespace boost { namespace spirit { namespace x3 { namespace traits { template struct variant_has_substitute_impl { // Find a type from the variant that can be a substitute for Attribute. // return true_ if one is found, else false_ typedef Variant variant_type; typedef typename variant_type::types types; typedef typename mpl::end::type end; typedef typename mpl::find::type iter_1; typedef typename mpl::eval_if< is_same, mpl::find_if>, mpl::identity >::type iter; typedef mpl::not_> type; }; template struct variant_has_substitute : variant_has_substitute_impl::type {}; template struct variant_has_substitute : mpl::true_ {}; template struct variant_has_substitute : mpl::true_ {}; }}}} #endif