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