• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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