/*============================================================================= 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_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM) #define BOOST_SPIRIT_X3_ATTRIBUTE_CATEGORY_JAN_4_2012_1150AM #include #include #include #include #include #include #include #include #include namespace boost { namespace spirit { namespace x3 { struct unused_type; }}} namespace boost { namespace spirit { namespace x3 { namespace traits { struct unused_attribute {}; struct plain_attribute {}; struct container_attribute {}; struct tuple_attribute {}; struct associative_attribute {}; struct variant_attribute {}; struct optional_attribute {}; struct range_attribute {}; template struct attribute_category : mpl::identity {}; template <> struct attribute_category : mpl::identity {}; template <> struct attribute_category : mpl::identity {}; template struct attribute_category< T , typename enable_if< typename mpl::eval_if< fusion::traits::is_sequence , fusion::traits::is_associative , mpl::false_ >::type >::type > : mpl::identity {}; template struct attribute_category< T , typename enable_if< mpl::and_< fusion::traits::is_sequence , mpl::not_ > > >::type > : mpl::identity {}; template struct attribute_category>::type> : mpl::identity {}; template struct attribute_category>::type> : mpl::identity {}; template struct attribute_category>::type> : mpl::identity {}; template struct attribute_category< T , typename enable_if< mpl::and_< traits::is_container , mpl::not_ > , mpl::not_ > > >::type > : mpl::identity {}; }}}} #endif