summaryrefslogtreecommitdiff
path: root/boost/fusion/support/deduce_sequence.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/support/deduce_sequence.hpp')
-rw-r--r--boost/fusion/support/deduce_sequence.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/boost/fusion/support/deduce_sequence.hpp b/boost/fusion/support/deduce_sequence.hpp
new file mode 100644
index 0000000000..ce02a3cd0d
--- /dev/null
+++ b/boost/fusion/support/deduce_sequence.hpp
@@ -0,0 +1,52 @@
+/*=============================================================================
+ Copyright (c) 2007 Tobias Schwinger
+
+ Use modification and distribution are subject to 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_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED)
+#define BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED
+
+#include <boost/fusion/support/deduce.hpp>
+#include <boost/fusion/container/vector/convert.hpp>
+#include <boost/fusion/view/transform_view.hpp>
+#include <boost/config.hpp>
+
+
+namespace boost { namespace fusion { namespace traits
+{
+ template <class Sequence> struct deduce_sequence;
+
+ namespace detail
+ {
+ struct deducer
+ {
+ template <typename Sig>
+ struct result;
+
+ template <class Self, typename T>
+ struct result< Self(T) >
+ : fusion::traits::deduce<T>
+ { };
+
+ // never called, but needed for decltype-based result_of (C++0x)
+#ifndef BOOST_NO_RVALUE_REFERENCES
+ template <typename T>
+ typename result< deducer(T) >::type
+ operator()(T&&) const;
+#endif
+ };
+ }
+
+ template <class Sequence>
+ struct deduce_sequence
+ : result_of::as_vector<
+ fusion::transform_view<Sequence, detail::deducer> >
+ { };
+
+}}}
+
+#endif
+