diff options
author | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
---|---|---|
committer | Chanho Park <chanho61.park@samsung.com> | 2014-12-11 18:55:56 +0900 |
commit | 08c1e93fa36a49f49325a07fe91ff92c964c2b6c (patch) | |
tree | 7a7053ceb8874b28ec4b868d4c49b500008a102e /boost/spirit/home/x3/support/traits/is_variant.hpp | |
parent | bb4dd8289b351fae6b55e303f189127a394a1edd (diff) | |
download | boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.gz boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.tar.bz2 boost-08c1e93fa36a49f49325a07fe91ff92c964c2b6c.zip |
Imported Upstream version 1.57.0upstream/1.57.0
Diffstat (limited to 'boost/spirit/home/x3/support/traits/is_variant.hpp')
-rw-r--r-- | boost/spirit/home/x3/support/traits/is_variant.hpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/boost/spirit/home/x3/support/traits/is_variant.hpp b/boost/spirit/home/x3/support/traits/is_variant.hpp new file mode 100644 index 0000000000..829a673c3f --- /dev/null +++ b/boost/spirit/home/x3/support/traits/is_variant.hpp @@ -0,0 +1,45 @@ +/*============================================================================= + 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_IS_VARIANT_JAN_10_2012_0823AM) +#define BOOST_SPIRIT_X3_IS_VARIANT_JAN_10_2012_0823AM + +#if defined(_MSC_VER) +#pragma once +#endif + +#include <boost/variant.hpp> +#include <boost/mpl/has_xxx.hpp> +#include <boost/mpl/bool.hpp> + +namespace boost { namespace spirit { namespace x3 { namespace traits +{ + namespace detail + { + // By declaring a nested struct in your class/struct, you tell + // spirit that it is regarded as a variant type. The minimum + // required interface for such a variant is that it has constructors + // for various types supported by your variant and a typedef 'types' + // which is an mpl sequence of the contained types. + // + // This is an intrusive interface. For a non-intrusive interface, + // use the is_variant trait. + BOOST_MPL_HAS_XXX_TRAIT_DEF(adapted_variant_tag) + } + + template <typename T, typename Enable = void> + struct is_variant + : detail::has_adapted_variant_tag<T> + {}; + + template <BOOST_VARIANT_ENUM_PARAMS(typename T)> + struct is_variant<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)>> + : mpl::true_ + {}; +}}}} + +#endif |