Squashed 'third_party/boostorg/function_types/' content from commit ae4fde2

Change-Id: I946aaade9862a3a50fdce89fbc618c914b0edae6
git-subtree-dir: third_party/boostorg/function_types
git-subtree-split: ae4fde2e2ae88291d6d656137169ff4003d184a1
diff --git a/build/preprocess_arity_loops.cpp b/build/preprocess_arity_loops.cpp
new file mode 100644
index 0000000..d39b65c
--- /dev/null
+++ b/build/preprocess_arity_loops.cpp
@@ -0,0 +1,88 @@
+
+// (C) Copyright Tobias Schwinger
+//
+// Use modification and distribution are subject to the boost Software License,
+// Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
+
+//------------------------------------------------------------------------------
+
+#if !defined(BOOST_FT_PREPROCESSING_MODE)
+
+#   ifndef __WAVE__
+#     error "Boost.Wave preprocessor required"
+#   endif
+
+#   include <boost/preprocessor/seq/cat.hpp>
+#   include <boost/preprocessor/stringize.hpp>
+
+#   if BOOST_PP_NIL // enable dependency scanning for dynamically included files
+#     include <boost/function_types/detail/encoding/def.hpp>
+#     include <boost/function_types/detail/components_impl/master.hpp>
+#     include <boost/function_types/detail/synthesize_impl/master.hpp>
+#     include <boost/function_types/detail/classifier_impl/master.hpp>
+#   endif
+
+#   pragma wave option(line: 0, preserve: 2)
+timestamp file
+#   pragma wave option(output: null)
+
+#   define BOOST_FT_PREPROCESSING_MODE
+
+#   define BOOST_FT_HEADER \
+        BOOST_PP_SEQ_CAT((arity)(BOOST_FT_MAX_ARITY)(_)(BOOST_FT_mfp)).hpp
+    #define BOOST_FT_OUT_FILE \
+        BOOST_PP_STRINGIZE(../../../BOOST_FT_al_path/BOOST_FT_HEADER)
+
+#   define BOOST_FT_al_path boost/function_types/detail/components_impl
+#   include __FILE__
+#   undef  BOOST_FT_al_path
+
+#   define BOOST_FT_al_path boost/function_types/detail/synthesize_impl
+#   include __FILE__
+#   undef  BOOST_FT_al_path
+
+#   define BOOST_FT_al_path boost/function_types/detail/classifier_impl
+#   include __FILE__
+#   undef  BOOST_FT_al_path
+
+#elif !defined(BOOST_FT_mfp)
+
+#   define BOOST_FT_mfp 0
+#   include __FILE__
+#   undef  BOOST_FT_mfp
+
+#   define BOOST_FT_mfp 1
+#   include __FILE__
+#   undef  BOOST_FT_mfp
+
+#elif !defined(BOOST_FT_MAX_ARITY)
+
+#   define BOOST_FT_FROM_ARITY 0
+#   define BOOST_FT_MAX_ARITY 10
+#   include __FILE__
+
+#   define BOOST_FT_FROM_ARITY 10
+#   define BOOST_FT_MAX_ARITY 20
+#   include __FILE__
+
+#   define BOOST_FT_FROM_ARITY 20
+#   define BOOST_FT_MAX_ARITY 30
+#   include __FILE__
+
+#   define BOOST_FT_FROM_ARITY 30
+#   define BOOST_FT_MAX_ARITY 40
+#   include __FILE__
+
+#   define BOOST_FT_FROM_ARITY 40
+#   define BOOST_FT_MAX_ARITY 50
+#   include __FILE__
+
+#else
+
+#   pragma message(generating BOOST_FT_OUT_FILE)
+#   pragma wave option(preserve: 2, output: BOOST_FT_OUT_FILE)
+#   include <boost/function_types/detail/pp_arity_loop.hpp>
+#   undef  BOOST_FT_MAX_ARITY
+
+#endif
+