1 /*============================================================================= 2 Copyright (c) 2009 Christopher Schmidt 3 4 Distributed under the Boost Software License, Version 1.0. (See accompanying 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 ==============================================================================*/ 7 8 #ifndef BOOST_FUSION_ITERATOR_DEREF_DATA_HPP 9 #define BOOST_FUSION_ITERATOR_DEREF_DATA_HPP 10 11 #include <boost/fusion/support/config.hpp> 12 #include <boost/fusion/support/tag_of.hpp> 13 14 namespace boost { namespace fusion 15 { 16 struct iterator_facade_tag; 17 18 namespace extension 19 { 20 template <typename> 21 struct deref_data_impl; 22 23 template <> 24 struct deref_data_impl<iterator_facade_tag> 25 { 26 template <typename It> 27 struct apply 28 : It::template deref_data<It> 29 {}; 30 }; 31 } 32 33 namespace result_of 34 { 35 template <typename It> 36 struct deref_data 37 : extension::deref_data_impl<typename traits::tag_of<It>::type>:: 38 template apply<It> 39 {}; 40 } 41 42 template <typename It> 43 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED 44 inline typename result_of::deref_data<It>::type deref_data(It const & it)45 deref_data(It const& it) 46 { 47 return result_of::deref_data<It>::call(it); 48 } 49 }} 50 51 #endif 52