diff DEPENDENCIES/generic/include/boost/variant/multivisitors.hpp @ 101:c530137014c0

Update Boost headers (1.58.0)
author Chris Cannam
date Mon, 07 Sep 2015 11:12:49 +0100
parents 2665513ce2d3
children
line wrap: on
line diff
--- a/DEPENDENCIES/generic/include/boost/variant/multivisitors.hpp	Fri Sep 04 12:01:02 2015 +0100
+++ b/DEPENDENCIES/generic/include/boost/variant/multivisitors.hpp	Mon Sep 07 11:12:49 2015 +0100
@@ -3,7 +3,7 @@
 //
 //  See http://www.boost.org for most recent version, including documentation.
 //
-//  Copyright Antony Polukhin, 2013.
+//  Copyright Antony Polukhin, 2013-2014.
 //
 //  Distributed under the Boost
 //  Software License, Version 1.0. (See accompanying file
@@ -12,132 +12,21 @@
 #ifndef BOOST_VARIANT_MULTIVISITORS_HPP
 #define BOOST_VARIANT_MULTIVISITORS_HPP
 
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#if defined(_MSC_VER)
 # pragma once
 #endif
 
-#include <boost/variant.hpp>
-#include <boost/bind.hpp>
+#include <boost/config.hpp>
+#include "boost/variant/variant_fwd.hpp" // for BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES
 
-#include <boost/preprocessor/repetition.hpp>
-#include <boost/preprocessor/punctuation/comma_if.hpp>
-#include <boost/preprocessor/arithmetic/add.hpp>
-#include <boost/preprocessor/arithmetic/sub.hpp>
-
-#ifndef BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS
-#   define BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS 4
+#if !defined(BOOST_VARIANT_DO_NOT_USE_VARIADIC_TEMPLATES) && !defined(BOOST_NO_CXX11_HDR_TUPLE)
+#   include <boost/variant/detail/multivisitors_cpp11_based.hpp>
+#   if !defined(BOOST_NO_CXX14_DECLTYPE_AUTO) && !defined(BOOST_NO_CXX11_DECLTYPE_N3276)
+#       include <boost/variant/detail/multivisitors_cpp14_based.hpp>
+#   endif
+#else
+#   include <boost/variant/detail/multivisitors_preprocessor_based.hpp>
 #endif
 
-namespace boost { 
-
-namespace detail { namespace variant {
-
-    template <class VisitorT, class Visitable1T, class Visitable2T>
-    struct two_variables_holder {
-    private:
-        VisitorT&       visitor_;
-        Visitable1T&    visitable1_;
-        Visitable2T&    visitable2_;
-
-        // required to supress warnings and enshure that we do not copy 
-        // this visitor
-        two_variables_holder& operator=(const two_variables_holder&);
-
-    public:
-        typedef BOOST_DEDUCED_TYPENAME VisitorT::result_type result_type;
-
-        explicit two_variables_holder(VisitorT& visitor, Visitable1T& visitable1, Visitable2T& visitable2) BOOST_NOEXCEPT 
-            : visitor_(visitor)
-            , visitable1_(visitable1)
-            , visitable2_(visitable2)
-        {}
-
-#define BOOST_VARIANT_OPERATOR_BEG()                            \
-    return ::boost::apply_visitor(                              \
-    ::boost::bind<result_type>(boost::ref(visitor_), _1, _2     \
-    /**/
-
-#define BOOST_VARIANT_OPERATOR_END()                            \
-    ), visitable1_, visitable2_);                               \
-    /**/
-
-#define BOOST_VARANT_VISITORS_VARIABLES_PRINTER(z, n, data)     \
-    BOOST_PP_COMMA() boost::ref( BOOST_PP_CAT(vis, n) )         \
-    /**/
-
-#define BOOST_VARIANT_VISIT(z, n, data)                                                     \
-    template <BOOST_PP_ENUM_PARAMS(BOOST_PP_ADD(n, 1), class VisitableUnwrapped)>           \
-    BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(result_type) operator()(                          \
-        BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ADD(n, 1), VisitableUnwrapped, & vis)          \
-    ) const                                                                                 \
-    {                                                                                       \
-        BOOST_VARIANT_OPERATOR_BEG()                                                        \
-        BOOST_PP_REPEAT(BOOST_PP_ADD(n, 1), BOOST_VARANT_VISITORS_VARIABLES_PRINTER, ~)     \
-        BOOST_VARIANT_OPERATOR_END()                                                        \
-    }                                                                                       \
-    /**/
-
-BOOST_PP_REPEAT( BOOST_PP_SUB(BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS, 2), BOOST_VARIANT_VISIT, ~)
-#undef BOOST_VARIANT_OPERATOR_BEG
-#undef BOOST_VARIANT_OPERATOR_END
-#undef BOOST_VARANT_VISITORS_VARIABLES_PRINTER
-#undef BOOST_VARIANT_VISIT
-
-    };
-
-    template <class VisitorT, class Visitable1T, class Visitable2T>
-    inline two_variables_holder<VisitorT, Visitable1T, Visitable2T> make_two_variables_holder(
-            VisitorT& visitor, Visitable1T& visitable1, Visitable2T& visitable2
-        ) BOOST_NOEXCEPT
-    {
-        return two_variables_holder<VisitorT, Visitable1T, Visitable2T>(visitor, visitable1, visitable2);
-    }
-
-    template <class VisitorT, class Visitable1T, class Visitable2T>
-    inline two_variables_holder<const VisitorT, Visitable1T, Visitable2T> make_two_variables_holder(
-            const VisitorT& visitor, Visitable1T& visitable1, Visitable2T& visitable2
-        ) BOOST_NOEXCEPT
-    {
-        return two_variables_holder<const VisitorT, Visitable1T, Visitable2T>(visitor, visitable1, visitable2);
-    }
-
-}} // namespace detail::variant
-
-#define BOOST_VARIANT_APPLY_VISITOR_BEG()                                               \
-    return ::boost::apply_visitor(                                                      \
-            boost::detail::variant::make_two_variables_holder(visitor, var0 , var1),    \
-            var2                                                                        \
-    /**/
-
-#define BOOST_VARIANT_APPLY_VISITOR_END()                       \
-    );                                                          \
-    /**/
-
-#define BOOST_VARANT_VISITORS_VARIABLES_PRINTER(z, n, data)     \
-    BOOST_PP_COMMA() BOOST_PP_CAT(var, BOOST_PP_ADD(n, 3))      \
-    /**/
-
-#define BOOST_VARIANT_VISIT(z, n, data)                                                                 \
-    template <class Visitor BOOST_PP_COMMA() BOOST_PP_ENUM_PARAMS(BOOST_PP_ADD(n, 3), class T)>         \
-    inline BOOST_VARIANT_AUX_GENERIC_RESULT_TYPE(BOOST_DEDUCED_TYPENAME Visitor::result_type) apply_visitor( \
-        data BOOST_PP_COMMA() BOOST_PP_ENUM_BINARY_PARAMS(BOOST_PP_ADD(n, 3), T, & var)     \
-    )                                                                                                   \
-    {                                                                                                   \
-        BOOST_VARIANT_APPLY_VISITOR_BEG()                                                               \
-        BOOST_PP_REPEAT(n, BOOST_VARANT_VISITORS_VARIABLES_PRINTER, ~)                                  \
-        BOOST_VARIANT_APPLY_VISITOR_END()                                                               \
-    }                                                                                                   \
-    /**/
-
-BOOST_PP_REPEAT( BOOST_PP_SUB(BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS, 2), BOOST_VARIANT_VISIT, const Visitor& visitor)
-BOOST_PP_REPEAT( BOOST_PP_SUB(BOOST_VARAINT_MAX_MULTIVIZITOR_PARAMS, 2), BOOST_VARIANT_VISIT, Visitor& visitor)
-
-#undef BOOST_VARIANT_APPLY_VISITOR_BEG
-#undef BOOST_VARIANT_APPLY_VISITOR_END
-#undef BOOST_VARANT_VISITORS_VARIABLES_PRINTER
-#undef BOOST_VARIANT_VISIT
-    
-} // namespace boost
-
 #endif // BOOST_VARIANT_MULTIVISITORS_HPP