1 //-----------------------------------------------------------------------------
2 // boost variant/detail/enable_recursive_fwd.hpp header file
3 // See http://www.boost.org for updates, documentation, and revision history.
4 //-----------------------------------------------------------------------------
9 // Distributed under the Boost Software License, Version 1.0. (See
10 // accompanying file LICENSE_1_0.txt or copy at
11 // http://www.boost.org/LICENSE_1_0.txt)
13 #ifndef BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP
14 #define BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP
16 #include <boost/mpl/aux_/config/ctps.hpp>
18 #include <boost/mpl/bool_fwd.hpp>
20 # include <boost/mpl/bool.hpp>
23 namespace detail { namespace variant {
25 ///////////////////////////////////////////////////////////////////////////////
26 // (detail) tag recursive_flag
28 // Signifies that the variant should perform recursive substituion.
39 ///////////////////////////////////////////////////////////////////////////////
40 // (detail) metafunction is_recursive_flag
42 // Signifies that the variant should perform recursive substituion.
47 struct is_recursive_flag
53 struct is_recursive_flag< recursive_flag<T> >
59 ///////////////////////////////////////////////////////////////////////////////
60 // (detail) metafunction enable_recursive
62 // Attempts recursive_variant_ tag substitution, wrapping with
63 // boost::recursive_wrapper if substituion occurs w/ non-indirect result
64 // (i.e., not a reference or pointer) *and* NoWrapper is false_.
68 , typename RecursiveVariant
69 , typename NoWrapper = mpl::false_
71 struct enable_recursive;
73 ///////////////////////////////////////////////////////////////////////////////
74 // (detail) metafunction class quoted_enable_recursive
76 // Same behavior as enable_recursive metafunction (see above).
79 typename RecursiveVariant
80 , typename NoWrapper = mpl::false_
82 struct quoted_enable_recursive;
84 }} // namespace detail::variant
87 #endif // BOOST_VARIANT_DETAIL_ENABLE_RECURSIVE_FWD_HPP