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