/*============================================================================= Copyright (c) 2001-2014 Joel de Guzman Copyright (c) 2013 Agustin Berge 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_HAS_ATTRIBUTE_JUN_6_2012_1714PM) #define BOOST_SPIRIT_X3_HAS_ATTRIBUTE_JUN_6_2012_1714PM #include #include #include #include #include #include namespace boost { namespace spirit { namespace x3 { struct unused_type; }}} namespace boost { namespace spirit { namespace x3 { namespace traits { /////////////////////////////////////////////////////////////////////////// // Whether a component has an attribute. By default, this compares the // component attribute against unused_type. If the component provides a // nested constant expression has_attribute as a hint, that value is used // instead. Components may specialize this. /////////////////////////////////////////////////////////////////////////// template struct has_attribute; namespace detail { template struct default_has_attribute : mpl::not_::type>> {}; template struct default_has_attribute>::type> : mpl::bool_ {}; template struct default_has_attribute::type> : has_attribute {}; } template struct has_attribute : detail::default_has_attribute {}; }}}} #endif