1 | /*============================================================================= |
2 | Copyright (c) 2007 Tobias Schwinger |
3 | |
4 | Use modification and distribution are subject to the Boost Software |
5 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
6 | http://www.boost.org/LICENSE_1_0.txt). |
7 | ==============================================================================*/ |
8 | |
9 | #if !defined(BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED) |
10 | #define BOOST_FUSION_SUPPORT_DEDUCE_SEQUENCE_HPP_INCLUDED |
11 | |
12 | #include <boost/fusion/support/config.hpp> |
13 | #include <boost/fusion/support/deduce.hpp> |
14 | #include <boost/fusion/container/vector/convert.hpp> |
15 | #include <boost/fusion/view/transform_view.hpp> |
16 | #include <boost/config.hpp> |
17 | |
18 | |
19 | namespace boost { namespace fusion { namespace traits |
20 | { |
21 | template <class Sequence> struct deduce_sequence; |
22 | |
23 | namespace detail |
24 | { |
25 | struct deducer |
26 | { |
27 | template <typename Sig> |
28 | struct result; |
29 | |
30 | template <class Self, typename T> |
31 | struct result< Self(T) > |
32 | : fusion::traits::deduce<T> |
33 | { }; |
34 | |
35 | // never called, but needed for decltype-based result_of (C++0x) |
36 | #ifndef BOOST_NO_CXX11_RVALUE_REFERENCES |
37 | template <typename T> |
38 | BOOST_FUSION_GPU_ENABLED |
39 | typename result< deducer(T) >::type |
40 | operator()(T&&) const; |
41 | #endif |
42 | }; |
43 | } |
44 | |
45 | template <class Sequence> |
46 | struct deduce_sequence |
47 | : result_of::as_vector< |
48 | fusion::transform_view<Sequence, detail::deducer> > |
49 | { }; |
50 | |
51 | }}} |
52 | |
53 | #endif |
54 | |
55 | |